首先我們來了解一下最左匹配原則,如下:
成都創(chuàng)新互聯(lián)公司專注于企業(yè)網(wǎng)絡(luò)營銷推廣、網(wǎng)站重做改版、雞澤網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、HTML5建站、商城網(wǎng)站建設(shè)、集團(tuán)公司官網(wǎng)建設(shè)、外貿(mào)網(wǎng)站建設(shè)、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁設(shè)計(jì)等建站業(yè)務(wù),價(jià)格優(yōu)惠性價(jià)比高,為雞澤等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。1、先定位該sql的查詢條件,有哪些,那些是等值的,那些是范圍的條件。
2、等值的條件去命中索引最左邊的一個(gè)字段,然后依次從左往右命中,范圍的放在最后。
分析講解
1、mysql的索引分為聚簇索引和非聚簇索引,mysql的表是聚集索引組織表。
聚集規(guī)則是:有主鍵則定義主鍵索引為聚集索引;沒有主鍵則選第一個(gè)不允許為NULL的唯一索引;還沒有就使用innodb的內(nèi)置rowid為聚集索引。
非聚集索引也稱為二級(jí)索引,或者輔助索引。
2、mysql的索引無論是聚集索引還是非聚集索引,都是B+樹結(jié)構(gòu)。聚集索引的葉子節(jié)點(diǎn)存放的是數(shù)據(jù),非聚集索引的葉子節(jié)點(diǎn)存放的是非聚集索引的key和主鍵值。B+樹的高度為索引的高度。
3、索引的高度
聚集索引的高度決定了根據(jù)主鍵取數(shù)據(jù)的理論IO次數(shù)。根據(jù)非聚集索引讀取數(shù)據(jù)的理論IO次數(shù)還要加上訪問聚集索引的IO次數(shù)總和。實(shí)際上可能要不了這么多IO。因?yàn)樗饕姆种Ч?jié)點(diǎn)所在的Page因?yàn)槎啻巫x取會(huì)在mysql內(nèi)存里cache住。
mysql的一個(gè)block大小默認(rèn)是16K,可以根據(jù)索引列的長度粗略估算索引的高度。
sql優(yōu)化依據(jù)
SQL語句中的where條件,使用以上的提取規(guī)則,最終都會(huì)被提取到Index Key (First Key & Last Key),Index Filter與Table Filter之中。
Index First Key,只是用來定位索引的起始范圍,因此只在索引第一次Search Path(沿著索引B+樹的根節(jié)點(diǎn)一直遍歷,到索引正確的葉節(jié)點(diǎn)位置)時(shí)使用,一次判斷即可;
Index Last Key,用來定位索引的終止范圍,因此對(duì)于起始范圍之后讀到的每一條索引記錄,均需要判斷是否已經(jīng)超過了Index Last Key的范圍,若超過,則當(dāng)前查詢結(jié)束;
Index Filter,用于過濾索引查詢范圍中不滿足查詢條件的記錄,因此對(duì)于索引范圍中的每一條記錄,均需要與Index Filter進(jìn)行對(duì)比,若不滿足Index Filter則直接丟棄,繼續(xù)讀取索引下一條記錄;
Table Filter,這是最后一道where條件的防線,用于過濾通過前面索引的層層考驗(yàn)的記錄,此時(shí)的記錄已經(jīng)滿足了Index First Key與Index Last Key構(gòu)成的范圍,并且滿足Index Filter的條件,回表讀取了完整的記錄,判斷完整記錄是否滿足Table Filter中的查詢條件,同樣的,若不滿足,跳過當(dāng)前記錄,繼續(xù)讀取索引的下一條記錄,若滿足,則返回記錄,此記錄滿足了where的所有條件,可以返回給前端用戶
分析
一條sql語句要執(zhí)行完成需要經(jīng)歷什么樣的過程?
當(dāng)一條sql語句提交給mysql數(shù)據(jù)庫進(jìn)行查詢的時(shí)候需要經(jīng)歷以下幾步:
1、先在where解析這一步把當(dāng)前的查詢語句中的查詢條件分解成每一個(gè)獨(dú)立的條件單元;
2、mysql會(huì)自動(dòng)將sql拆分重組;
3、然后where條件會(huì)在B-tree index這部分進(jìn)行索引匹配,如果命中索引,就會(huì)定位到指定的table records位置。如果沒有命中,則只能采用全部掃描的方式;
4、根據(jù)當(dāng)前查詢字段返回對(duì)應(yīng)的數(shù)據(jù)值。
如下圖:
以上就是mysql索引命中規(guī)則講解的詳細(xì)內(nèi)容,更多請(qǐng)關(guān)注創(chuàng)新互聯(lián)其它相關(guān)文章!
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。