如何定位並優化慢查詢Sql?
![快速理解-數據庫索引-索引額外的問題-如何調優SQL](http://p2.ttnews.xyz/loading.gif)
具體場景具體分析,只提出大致思路。
1,根據慢日誌定位慢查詢Sql。
2,使用explain等工具分析Sql
3,修改Sql或者儘量讓sql走索引
MySQL有很多自帶的系統變量,咱們可以通過查詢一些變量來得知有哪些配置信息:
這裡我們是要查詢跟慢日誌相關的一些信息,
show VARIABLES LIKE '%query%'
![快速理解-數據庫索引-索引額外的問題-如何調優SQL](http://p2.ttnews.xyz/loading.gif)
然後查詢一下慢SQL的數量(注意一下,這裡只是記錄本次會話的慢SQL的條數,一旦我們關閉了MySQL的客戶端,再重啟之後,這個慢SQL的條數就會被清零),
show status like '%slow_queries%';
然後我們將慢查詢日誌打開,sql如下:
set global slow_query_log = on;
然後查看一下,發現慢查詢日誌已經打開了。
然後我們需要設置慢查詢時間為1s,sql如下:
set global long_query_time = 1;
然後重新連接客戶端(為什麼要重新連接客戶端呢?因為有些系統配置修改後可以立即看到結果,有些則不行,設置慢查詢時間屬於後者),再執行“show VARIABLES LIKE ‘%query%’“,發現時間已經變化:
我們也可以到MySQL數據庫的配置文件my.ini文件中去做修改,這樣的修改將是永久性的。我們在這裡做的修改,如果重啟了數據庫的服務,這些配置將會被還原成默認的配置。
接下來我們來製造慢查詢:
我已經提前在一張表裡灌入了10萬多條數據,現在我們寫一個慢查詢Sql,執行看下時間:
然後執行:show status like ‘%slow_queries%’;結果如下:
打開慢查詢日誌:
可以看到這裡已經記錄了慢查詢SQL和查詢所用的時間。
然後我們用explain對慢sql進行分析:
先了解下Explain關鍵字段:
(1)type:表示的是MySQL找到需要的數據行的方式。
從左到右性能越來越差。當我們看到type為最後兩個的時候,表明sql走的是全表掃描。
(2)extra
閱讀更多 程序秀 的文章