IT貓撲網(wǎng):您身邊最放心的安全下載站! 最新更新|軟件分類|軟件專題|手機(jī)版|論壇轉(zhuǎn)貼|軟件發(fā)布

您當(dāng)前所在位置: 首頁(yè)數(shù)據(jù)庫(kù)MYSQL → MySQL查詢優(yōu)化系列之MySQL查詢優(yōu)化器

MySQL查詢優(yōu)化系列之MySQL查詢優(yōu)化器

時(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ì)非常快:

  1. 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ǔ)句的前面:

  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返回的信息比上面的信息要多一些,還包括用于掃描數(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è)列上都有索引:

  1. SELECT?col3?FROM?mytable ?
  2. 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)閱讀

文章評(píng)論
發(fā)表評(píng)論

熱門文章 Xbox Game Pass Xbox Game Pass 10款MySQL數(shù)據(jù)庫(kù)客戶端圖形界面管理工具推薦 10款MySQL數(shù)據(jù)庫(kù)客戶端圖形界面管理工具推薦 MySQL常用維護(hù)管理工具 MySQL常用維護(hù)管理工具 MySQL數(shù)據(jù)庫(kù)啟動(dòng)失敗1067進(jìn)程意外終止的解決辦法總結(jié) MySQL數(shù)據(jù)庫(kù)啟動(dòng)失敗1067進(jìn)程意外終止的解決辦法總結(jié)

相關(guān)下載

    人氣排行 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ǔ)句