時間:2015/6/28來源:IT貓撲網(wǎng)作者:網(wǎng)管聯(lián)盟我要評論(0)
此文章主要向大家描述的是mysql查詢優(yōu)化系列之MySQL查詢優(yōu)化器,當你在對一查詢進行提交的時候,MySQL數(shù)據(jù)庫會對它進行分析,主要是看其是否可以用來做一些優(yōu)化使處理該查詢的速度更快。
這一部分將介紹查詢優(yōu)化器是如何工作的。如果你想知道MySQL(和php搭配之最佳組合)采用的優(yōu)化手段,可以查看MySQL(和PHP搭配之最佳組合)參考手冊。
當然,MySQL(和PHP搭配之最佳組合)查詢優(yōu)化器也利用了索引,但是它也使用了其它一些信息。例如,如果你提交如下所示的查詢,那么無論數(shù)據(jù)表有多大,MySQL(和PHP搭配之最佳組合)執(zhí)行它的速度都會非常快:
- SELECT * FROM tbl_name WHERE 0;
在這個例子中,MySQL(和PHP搭配之最佳組合)查看WHERE子句,認識到?jīng)]有符合查詢條件的數(shù)據(jù)行,因此根本就不考慮搜索數(shù)據(jù)表。你可以通過提供一個EXPLAIN語句看到這種情況,這個語句讓MySQL(和PHP搭配之最佳組合)顯示自己執(zhí)行的但實際上沒有真正地執(zhí)行的SELECT查詢的一些信息。如果要使用EXPLAIN,只需要在EXPLAIN單詞放在SELECT語句的前面:
- MySQL(和PHP搭配之最佳組合)> EXPLAIN SELECT * FROM tbl_name WHERE 0\G
- id: 1
- select_type: SIMPLE
- table: NULL
- type: NULL
- possible_keys: NULL
- key: NULL
- key_len: NULL
- ref: NULL
- rows: NULL
- Extra: Impossible WHERE
通常情況下,EXPLAIN返回的信息比上面的信息要多一些,還包括用于掃描數(shù)據(jù)表的索引、使用的聯(lián)結類型、每張數(shù)據(jù)表中估計需要檢查的數(shù)據(jù)行數(shù)量等非空(NULL)信息。
優(yōu)化器是如何工作的
MySQL(和PHP搭配之最佳組合)查詢優(yōu)化器有幾個目標,但是其中最主要的目標是盡可能地使用索引,并且使用最嚴格的索引來消除盡可能多的數(shù)據(jù)行。你的最終目標是提交SELECT語句查找數(shù)據(jù)行,而不是排除數(shù)據(jù)行。
優(yōu)化器試圖排除數(shù)據(jù)行的原因在于它排除數(shù)據(jù)行的速度越快,那么找到與條件匹配的數(shù)據(jù)行也就越快。如果能夠首先進行最嚴格的測試,查詢就可以執(zhí)行地更快。假設你的查詢檢驗了兩個數(shù)據(jù)列,每個列上都有索引:
- SELECT col3 FROM mytable
- WHERE col1 = ’some value’ AND col2 = ’some other value’;
假設col1上的測試匹配了900個數(shù)據(jù)行,col2上的測試匹配了300個數(shù)據(jù)行,而同時進行的測試只得到了30個數(shù)據(jù)行。先測試Col1會有900個數(shù)據(jù)行,需要檢查它們找到其中的30個與col2中的值匹配記錄,其中就有870次是失敗了。
先測試col2會有300個數(shù)據(jù)行,需要檢查它們找到其中的30個與col1中的值匹配的記錄,只有270次是失敗的,因此需要的計算和磁盤I/O更少。其結果是,優(yōu)化器會先測試col2,因為這樣做開銷更小。
以上的相關內容就是對MySQL查詢優(yōu)化系列講座之查詢優(yōu)化器的介紹,望你能有所收獲。
關鍵詞標簽:MySQL,查詢優(yōu)化
相關閱讀
熱門文章 10款MySQL數(shù)據(jù)庫客戶端圖形界面管理工具推薦MySQL常用維護管理工具Linux VPS/服務器上輕松導入、導出MySQL數(shù)據(jù)MySQL復制的概述、安裝、故障、技巧、工具
人氣排行 MySQL數(shù)據(jù)庫啟動失敗1067進程意外終止的解決辦法總結Mysql 1045錯誤解決辦法10款MySQL數(shù)據(jù)庫客戶端圖形界面管理工具推薦MySQL服務器進程CPU占用100%解決辦法MySQL導出導入命令的用例MySQL無法啟動、無法停止各種解決方法總結三種常用的MySQL建表語句Mysql清空表的實現(xiàn)方法