程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> MySQL查詢優化系列之MySQL查詢優化器

MySQL查詢優化系列之MySQL查詢優化器

編輯:MySQL綜合教程

此文章主要向大家描述的是MySQL查詢優化系列之MySQL查詢優化器,當你在對一查詢進行提交的時候,MySQL數據庫會對它進行分析,主要是看其是否可以用來做一些優化使處理該查詢的速度更快。

這一部分將介紹查詢優化器是如何工作的。如果你想知道MySQL(和PHP搭配之最佳組合)采用的優化手段,可以查看MySQL(和PHP搭配之最佳組合)參考手冊。

當然,MySQL(和PHP搭配之最佳組合)查詢優化器也利用了索引,但是它也使用了其它一些信息。例如,如果你提交如下所示的查詢,那麼無論數據表有多大,MySQL(和PHP搭配之最佳組合)執行它的速度都會非常快:

  1. SELECT * FROM tbl_name WHERE 0; 

在這個例子中,MySQL(和PHP搭配之最佳組合)查看WHERE子句,認識到沒有符合查詢條件的數據行,因此根本就不考慮搜索數據表。你可以通過提供一個EXPLAIN語句看到這種情況,這個語句讓MySQL(和PHP搭配之最佳組合)顯示自己執行的但實際上沒有真正地執行的SELECT查詢的一些信息。如果要使用EXPLAIN,只需要在EXPLAIN單詞放在SELECT語句的前面:

  1. MySQL(和PHP搭配之最佳組合)> EXPLAIN SELECT * FROM tbl_name WHERE 0\G  
  2. id: 1  
  3. select_type: SIMPLE  
  4. table: NULL  
  5. type: NULL  
  6. possible_keys: NULL  
  7. key: NULL  
  8. key_len: NULL  
  9. ref: NULL  
  10. rows: NULL  
  11. Extra: Impossible WHERE  
  12.  

通常情況下,EXPLAIN返回的信息比上面的信息要多一些,還包括用於掃描數據表的索引、使用的聯結類型、每張數據表中估計需要檢查的數據行數量等非空NULL)信息。

優化器是如何工作的

MySQL(和PHP搭配之最佳組合)查詢優化器有幾個目標,但是其中最主要的目標是盡可能地使用索引,並且使用最嚴格的索引來消除盡可能多的數據行。你的最終目標是提交SELECT語句查找數據行,而不是排除數據行。

優化器試圖排除數據行的原因在於它排除數據行的速度越快,那麼找到與條件匹配的數據行也就越快。如果能夠首先進行最嚴格的測試,查詢就可以執行地更快。假設你的查詢檢驗了兩個數據列,每個列上都有索引:

  1. SELECT col3 FROM mytable  
  2. WHERE col1 = ’some value’ AND col2 = ’some other value’; 

假設col1上的測試匹配了900個數據行,col2上的測試匹配了300個數據行,而同時進行的測試只得到了30個數據行。先測試Col1會有900個數據行,需要檢查它們找到其中的30個與col2中的值匹配記錄,其中就有870次是失敗了。

先測試col2會有300個數據行,需要檢查它們找到其中的30個與col1中的值匹配的記錄,只有270次是失敗的,因此需要的計算和磁盤I/O更少。其結果是,優化器會先測試col2,因為這樣做開銷更小。

以上的相關內容就是對MySQL查詢優化系列講座之查詢優化器的介紹,望你能有所收獲。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved