快速理解-數據庫索引-索引額外的問題-如何調優SQL

如何定位並優化慢查詢Sql?

快速理解-數據庫索引-索引額外的問題-如何調優SQL

具體場景具體分析,只提出大致思路。

1,根據慢日誌定位慢查詢Sql。

2,使用explain等工具分析Sql

3,修改Sql或者儘量讓sql走索引

MySQL有很多自帶的系統變量,咱們可以通過查詢一些變量來得知有哪些配置信息:

這裡我們是要查詢跟慢日誌相關的一些信息,

show VARIABLES LIKE '%query%'

快速理解-數據庫索引-索引額外的問題-如何調優SQL

然後查詢一下慢SQL的數量(注意一下,這裡只是記錄本次會話的慢SQL的條數,一旦我們關閉了MySQL的客戶端,再重啟之後,這個慢SQL的條數就會被清零),

show status like '%slow_queries%';

快速理解-數據庫索引-索引額外的問題-如何調優SQL

然後我們將慢查詢日誌打開,sql如下:

set global slow_query_log = on;

快速理解-數據庫索引-索引額外的問題-如何調優SQL

然後查看一下,發現慢查詢日誌已經打開了。

然後我們需要設置慢查詢時間為1s,sql如下:

set global long_query_time = 1;

然後重新連接客戶端(為什麼要重新連接客戶端呢?因為有些系統配置修改後可以立即看到結果,有些則不行,設置慢查詢時間屬於後者),再執行“show VARIABLES LIKE ‘%query%’“,發現時間已經變化:

快速理解-數據庫索引-索引額外的問題-如何調優SQL

我們也可以到MySQL數據庫的配置文件my.ini文件中去做修改,這樣的修改將是永久性的。我們在這裡做的修改,如果重啟了數據庫的服務,這些配置將會被還原成默認的配置。

接下來我們來製造慢查詢:

我已經提前在一張表裡灌入了10萬多條數據,現在我們寫一個慢查詢Sql,執行看下時間:

快速理解-數據庫索引-索引額外的問題-如何調優SQL

然後執行:show status like ‘%slow_queries%’;結果如下:

快速理解-數據庫索引-索引額外的問題-如何調優SQL


打開慢查詢日誌:

快速理解-數據庫索引-索引額外的問題-如何調優SQL

可以看到這裡已經記錄了慢查詢SQL和查詢所用的時間。

然後我們用explain對慢sql進行分析:

快速理解-數據庫索引-索引額外的問題-如何調優SQL

先了解下Explain關鍵字段:

(1)type:表示的是MySQL找到需要的數據行的方式。

快速理解-數據庫索引-索引額外的問題-如何調優SQL

從左到右性能越來越差。當我們看到type為最後兩個的時候,表明sql走的是全表掃描。

(2)extra

快速理解-數據庫索引-索引額外的問題-如何調優SQL


分享到:


相關文章: