Mysql的Sql語句優化

  在Mysql中執行Sql語句經常會遇到有的語句執行時間特別長的情況,出現了這種情況我們就需要靜下心分析分析。

  首先,我們需要確定系統中哪些語句執行時間比較長。這個可以使用Mysql的慢日誌來跟蹤。下面給出一段SQL示例:

 

  首先準備一個數據庫,這裏有現成的數據:

  https://github.com/grezbo/cn_zipcode

  數據準備好了,我們先看下mysql中關於慢日誌的系統變量(慢日誌默認是沒有開啓的,而我這裏已經開啓了)

  show variables like 'slow%'

  

  如果看到slow_query_log是OFF,那就需要手動開啓

  set global slow_query_log = ON;

  再看下當前將超過多少時間的sql作爲慢日誌

  show variables like 'long%';

  

  我這裏目前是1s,可以設置:set long_query_time = 0.1;

  最後看下當前session記錄的慢日誌次數:

  show status like '%slow_q%';

  

  我這裏當前已經執行了3次慢查詢

  好啦,前期工作準備好了,接下來我們可以執行一條語句了:

  select * from zip_code order by district, area;

  

  這條語句執行了1.745s,已經達到了慢查詢的標準,應該被記錄下來,所以我們查看一下狀態變量Slow_queries

  

  已經變成了4,說明該條語句確實被記錄了下來,那麼我們去看下慢查詢語句所在的文件

  

  在slow_query_log_file這個路徑下面

   

  可以看到這裏就是我們剛纔執行那條語句,可以看到真實執行的時間是1.743617。

 

  到這一步,我們定位了慢SQL,接下來就是對SQL語句進行分析了。有經驗人看幾眼SQL可能就知道問題在哪兒了,

我做不到。。。。我一般採用分段分析和用explain命令來分析。

  對剛纔那條語句使用explain:

  explain select * from zip_code order by district, area;

  

  這條命令返回的特別快,因爲它並不會去執行SQL語句,只是分析語法優化器最終會採用什麼策略來執行SQL語句。

  這裏面可以看到該條SQL有沒有走索引,用的什麼來排序,用了那個索引等等,具體可以參考其他博文,我就沒必要再貼出來了

  https://www.cnblogs.com/yycc/p/7338894.html

  優化的原則是查詢要儘量走索引,避免過多的回表和全表掃描的發生;儘量不要用*號,儘量帶上where條件。

 

  以上是一篇很簡單的關於分析慢SQL的文章,感謝各位閱讀。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章