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

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

(1) show  variables like 'slow_query_log';     查看慢查詢日誌是否開啓sql

(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就記錄到日誌中spa

這裏能夠使用查看變量的方式,查看上面參數的默認值 好比:show variables like 'slow%' 能夠看到慢查詢日誌的默認存放位置3d

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

3. 經常使用的慢查詢日誌分析工具
blog

(1) mysqldumpslow 工具(通常在安裝mysql時就已經有了) 用法: mysqldumpslow  + 參數 + 慢查詢日誌文件路徑索引

經常使用參數:ip

-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

相關文章
相關標籤/搜索