時(shí)間:2015-06-28 00:00:00 來(lái)源:IT貓撲網(wǎng) 作者:網(wǎng)管聯(lián)盟 我要評(píng)論(4)
此文章主要向大家描述的是MySQL查詢優(yōu)化系列之MySQL查詢優(yōu)化器,當(dāng)你在對(duì)一查詢進(jìn)行提交的時(shí)候,MySQL數(shù)據(jù)庫(kù)會(huì)對(duì)它進(jìn)行分析,主要是看其是否可以用來(lái)做一些優(yōu)化使處理該查詢的速度更快。
這一部分將介紹查詢優(yōu)化器是如何工作的。如果你想知道MySQL(和PHP搭配之最佳組合)采用的優(yōu)化手段,可以查看MySQL(和PHP搭配之最佳組合)參考手冊(cè)。
當(dāng)然,MySQL(和PHP搭配之最佳組合)查詢優(yōu)化器也利用了索引,但是它也使用了其它一些信息。例如,如果你提交如下所示的查詢,那么無(wú)論數(shù)據(jù)表有多大,MySQL(和PHP搭配之最佳組合)執(zhí)行它的速度都會(huì)非常快:
- SELECT?*?FROM?tbl_name?WHERE?0;?
在這個(gè)例子中,MySQL(和PHP搭配之最佳組合)查看WHERE子句,認(rèn)識(shí)到?jīng)]有符合查詢條件的數(shù)據(jù)行,因此根本就不考慮搜索數(shù)據(jù)表。你可以通過(guò)提供一個(gè)EXPLAIN語(yǔ)句看到這種情況,這個(gè)語(yǔ)句讓MySQL(和PHP搭配之最佳組合)顯示自己執(zhí)行的但實(shí)際上沒(méi)有真正地執(zhí)行的SELECT查詢的一些信息。如果要使用EXPLAIN,只需要在EXPLAIN單詞放在SELECT語(yǔ)句的前面:
- 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)結(jié)類型、每張數(shù)據(jù)表中估計(jì)需要檢查的數(shù)據(jù)行數(shù)量等非空(NULL)信息。
優(yōu)化器是如何工作的
MySQL(和PHP搭配之最佳組合)查詢優(yōu)化器有幾個(gè)目標(biāo),但是其中最主要的目標(biāo)是盡可能地使用索引,并且使用最嚴(yán)格的索引來(lái)消除盡可能多的數(shù)據(jù)行。你的最終目標(biāo)是提交SELECT語(yǔ)句查找數(shù)據(jù)行,而不是排除數(shù)據(jù)行。
優(yōu)化器試圖排除數(shù)據(jù)行的原因在于它排除數(shù)據(jù)行的速度越快,那么找到與條件匹配的數(shù)據(jù)行也就越快。如果能夠首先進(jìn)行最嚴(yán)格的測(cè)試,查詢就可以執(zhí)行地更快。假設(shè)你的查詢檢驗(yàn)了兩個(gè)數(shù)據(jù)列,每個(gè)列上都有索引:
- SELECT?col3?FROM?mytable ?
- WHERE?col1?=?’some?value’?AND?col2?=?’some?other?value’;?
假設(shè)col1上的測(cè)試匹配了900個(gè)數(shù)據(jù)行,col2上的測(cè)試匹配了300個(gè)數(shù)據(jù)行,而同時(shí)進(jìn)行的測(cè)試只得到了30個(gè)數(shù)據(jù)行。先測(cè)試Col1會(huì)有900個(gè)數(shù)據(jù)行,需要檢查它們找到其中的30個(gè)與col2中的值匹配記錄,其中就有870次是失敗了。
先測(cè)試col2會(huì)有300個(gè)數(shù)據(jù)行,需要檢查它們找到其中的30個(gè)與col1中的值匹配的記錄,只有270次是失敗的,因此需要的計(jì)算和磁盤I/O更少。其結(jié)果是,優(yōu)化器會(huì)先測(cè)試col2,因?yàn)檫@樣做開(kāi)銷更小。
以上的相關(guān)內(nèi)容就是對(duì)MySQL查詢優(yōu)化系列講座之查詢優(yōu)化器的介紹,望你能有所收獲。
關(guān)鍵詞標(biāo)簽:MySQL,查詢優(yōu)化
相關(guān)閱讀
熱門文章 Xbox Game Pass 10款MySQL數(shù)據(jù)庫(kù)客戶端圖形界面管理工具推薦 MySQL常用維護(hù)管理工具 MySQL數(shù)據(jù)庫(kù)啟動(dòng)失敗1067進(jìn)程意外終止的解決辦法總結(jié)
人氣排行 10款MySQL數(shù)據(jù)庫(kù)客戶端圖形界面管理工具推薦 MySQL數(shù)據(jù)庫(kù)啟動(dòng)失敗1067進(jìn)程意外終止的解決辦法總結(jié) Mysql 1045錯(cuò)誤解決辦法 MySQL服務(wù)器進(jìn)程CPU占用100%解決辦法 MySQL導(dǎo)出導(dǎo)入命令的用例 MySQL連接字符串的實(shí)際操作步驟匯總 MySQL無(wú)法啟動(dòng)、無(wú)法停止各種解決方法總結(jié) 三種常用的MySQL建表語(yǔ)句