Mysql數據庫優化之SQL及索引優化


1. 如何發現有問題的SQL?  使用mysql慢查詢日志對有效率問題的Sql進行監視

(1) show  variables like 'slow_query_log';     查看慢查詢日志是否開啟

(2) set global slow_qeury_log_file = '/home/mysql/sql_log/mysql_slow.log'     設置慢查詢日志文件的位置

(3) set global log_queries_not_using_indexes = on     把沒有使用索引的SQL存入慢查詢日志

(4) set global long_query_time = 1        設置時間限制,即超過這個時間的SQL就記錄到日志中

這里可以使用查看變量的方式,查看上面參數的默認值 比如:show variables like 'slow%' 可以看到慢查詢日志的默認存放位置

2. 慢查詢日志包含的內容

3. 常用的慢查詢日志分析工具

(1) mysqldumpslow 工具(一般在安裝mysql時就已經有了) 用法: mysqldumpslow  + 參數 + 慢查詢日志文件路徑

常用參數:

-t 數字: 顯示前n條日志       可以使用mysqldumpslow -h  查看所有可攜帶的參數

(2) pt-query-digest 工具

 

使用這個工具分析慢查詢日志時的輸出 共有三部分:

第一部分:顯示日志的時間范圍,總的SQL數量和不同的SQL數量

第二部分:

第三部分:顯示具體的SQL語句

4.根據日志中的指標發現有問題的SQL

(1) 查詢次數多且每次查詢占用時間長的SQL        通常為pt-query-digest分析的前幾個查詢

(2) IO大的SQL    注意pt-query-digest 分析中的Rows examine (即掃描的行數)項

(3) 未命中索引的SQL     注意pt-query-digest 分析中Rows examine  和 Rows  Send 的對比

 5. 有問題的SQL被發現后,使用explain從句查詢SQL的執行計划,explain返回的是一個表格,下面是各列的含義:

const: 通常是對主鍵或唯一索引的查找

eq_reg: 范圍查找

ref: 連接查找,基於索引

range: 基於索引范圍查找

index: 對索引的掃描

ALL: 對整個表的掃描

 5. 優化子查詢

盡量使用連表查詢代替子查詢

當有重復數據時,可以使用distinct進行去重。

 6. 優化limit查詢

(1) 優化方案:使用有索引的列或主鍵進行order by 操作

(2) 優化方案:記錄上次返回的主鍵,在下次查詢時使用主鍵過濾(方向就是避免掃描過多的記錄)

select film_id, description from film where  film_id > 55 and film_id <= 60 order by film_id limit 1,5


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM