MySQL數據庫的SQL語句優化方法

一、使用 show status 瞭解各類 SQL 的執行頻率

mysql> show status like 'Com%';
該命令能夠查詢 sql 命令的執行次數。mysql

二、定位執行效率較低的 SQL 語句

定位執行效率較低的 SQL 通常有兩種方法:sql

  1. 經過慢查詢日誌定位效率低的 SQL,用 --log-show-queries[=file_name]該選項啓動;
  2. 慢查詢日誌在查詢結束後纔會記錄,因此在應用執行效率出現問題的時候慢查詢日誌不能定位問題,這時可使用 show processlist 命令查看當前 MySQL 在執行的線程,包括線程的狀態、是否鎖表等,能夠實時地查看 SQL 的執行狀況,同時對一些鎖表操做進行優化;

三、經過 explain 分析低效 SQL 的執行計劃

all < index < range < ref < eq_ref < const, system < null性能

以上常見的訪問類型從左至右,性能又差到好優化

  1. ALL:全表掃描, MySQL 遍歷全表來匹配行;
  2. index:索引掃描,MySQL 遍歷整個索引來查詢匹配的行;
  3. range:索引範圍掃描,常見於 <、<=、>、>=、between 等操做符;
  4. ref:使用非惟一索引掃描或惟一索引的前綴掃描,返回匹配某個單獨值的記錄行;
  5. eq_ref:相似 ref,區別就在使用的索引是惟一索引,對於每一個索引鍵值,表中只有一條記錄匹配;簡單來講,就是多表鏈接中使用 primary key 或 unique index 做爲關聯條件;
  6. const / system:單表中最多有一個匹配行,查詢很是迅速,因此這個匹配行中的其它列的值可 以被優化器在當前查詢中看成常量來處理,例如,根據主鍵 primary key 或 惟一索引 unique index 進行查詢;
  7. NULL:MySQL 不用訪問表或索引,直接就能獲得結果;

四、MySQL 4.1 的擴展命令 explain extended

在 MySQL 4.1 引入了 explain extended 命令,經過該命令加上 show warnings,咱們可以獲得 SQL 在真正執行以前優化器作了哪些 SQL 改寫。線程

相關文章
相關標籤/搜索