RT,在遇到一个运行很慢SQL的情况下,如何进行分析、优化、测试?简单说明一下步骤思路;
人生最曼妙的风景,竟是内心的淡定与从容!
如果不知道是哪個sql慢,就開啟mysql的慢查詢日誌。 對記錄的日誌檔案用mysql安裝目錄下的bin目錄下的 mysqldumpslow查看。 具體指令是 mysqldumpslow -s c -t 10 /path/to/slow.log。 可以提取出top10慢的sql語句模式。 這樣就找到哪些語句慢了。
找到之後分析的最簡單手段是explain查看執行計劃。 例如 explain select * from t where xxx order by xxx。
查看explain的結果,可以看出索引使用情況,排序方式等。具體的結果查看mysql官方文件中explain指令的解釋最好了。
最佳化的最主要手段是確保索引建立正確。 如果索引方面沒什麼好優化的空間,那麼多半是表結構設計不合理,或者查詢方式組合不合理。 這個就要結合具體的業務去進行資料儲存結構或程式架構的最佳化了。
MySQL 中的explain指令, 可以根據其返還內容分析查詢效率。 mysql慢查詢日誌開啟後,在日誌中也會記錄一些查詢速度較慢的 sql語句。
如果不知道是哪個sql慢,就開啟mysql的慢查詢日誌。 對記錄的日誌檔案用mysql安裝目錄下的bin目錄下的 mysqldumpslow查看。 具體指令是 mysqldumpslow -s c -t 10 /path/to/slow.log。 可以提取出top10慢的sql語句模式。 這樣就找到哪些語句慢了。
找到之後分析的最簡單手段是explain查看執行計劃。 例如
explain select * from t where xxx order by xxx。
查看explain的結果,可以看出索引使用情況,排序方式等。具體的結果查看mysql官方文件中explain指令的解釋最好了。
最佳化的最主要手段是確保索引建立正確。 如果索引方面沒什麼好優化的空間,那麼多半是表結構設計不合理,或者查詢方式組合不合理。 這個就要結合具體的業務去進行資料儲存結構或程式架構的最佳化了。
MySQL 中的explain指令, 可以根據其返還內容分析查詢效率。 mysql慢查詢日誌開啟後,在日誌中也會記錄一些查詢速度較慢的 sql語句。