日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

如何正確的使用索引 mysql索引怎么實(shí)現(xiàn)( 二 )


將P1頁加載到內(nèi)存在內(nèi)存中采用二分法查找,可以確定105位于[100,150)中間,100關(guān)聯(lián)P4頁將P4加載到內(nèi)存中,采用二分法找到最有一個(gè)小于105的記錄,即100,然后通過鏈表從100開始向后訪問,找到所有的105記錄,直到遇到第一個(gè)大于100的值為止范圍搜索

如何正確的使用索引 mysql索引怎么實(shí)現(xiàn)


數(shù)據(jù)如上圖所示,所有記錄[55,150]均可查詢 。由于頁面是雙向鏈表升序排列,頁面內(nèi)部的數(shù)據(jù)是單項(xiàng)升序排列,我們只需要找到范圍初始值所在的位置,然后依靠鏈表訪問兩個(gè)位置之間的所有數(shù)據(jù) 。流程如下:
將P1頁加載到內(nèi)存內(nèi)存中采用二分法找到55位于50關(guān)聯(lián)的P3頁中,150位于P5頁中將P3加載到內(nèi)存中,采用二分法找到第一個(gè)55的記錄,然后通過鏈表結(jié)構(gòu)繼續(xù)向后訪問P3中的60、67,當(dāng)P3訪問完畢之后,通過P3的nextpage指針訪問下一頁P(yáng)4中所有記錄,繼續(xù)遍歷P4中的所有記錄,直到訪問到P5中所有的150為止 。模糊匹配
如何正確的使用索引 mysql索引怎么實(shí)現(xiàn)


數(shù)據(jù)如上圖 。
查詢所有以' f '開頭的記錄
流程如下:
將P1數(shù)據(jù)加載到內(nèi)存中在P1頁的記錄中采用二分法找到最后一個(gè)小于等于f的值,這個(gè)值是f,以及第一個(gè)大于f的,這個(gè)值是z,f指向葉節(jié)點(diǎn)P3,z指向葉節(jié)點(diǎn)P6,此時(shí)可以斷定以f開頭的記錄可能存在于[P3,P6)這個(gè)范圍的頁內(nèi),即P3、P4、P5這三個(gè)頁中加載P3這個(gè)頁,在內(nèi)部以二分法找到第一條f開頭的記錄,然后以鏈表方式繼續(xù)向后訪問P4、P5中的記錄,即可以找到所有已f開頭的數(shù)據(jù)查詢包含“f”的記錄
包含一個(gè)在sql中寫成%f%的查詢 。我們能通過索引快速定位頁面嗎?
你可以看看上面的數(shù)據(jù) 。f存在于每一頁 。我們無法通過P1頁面中的記錄來判斷哪些頁面包含F(xiàn) 。我們只能通過io加載所有葉節(jié)點(diǎn),并過濾所有記錄,以找到包含F(xiàn)的記錄..
因此,如果使用% value%,則索引對(duì)于查詢無效 。
最左匹配原則
當(dāng)B樹中的數(shù)據(jù)項(xiàng)是復(fù)雜的數(shù)據(jù)結(jié)構(gòu),比如(姓名,年齡,性別)時(shí),B樹從左到右建立搜索樹 。比如搜索(張三,20,F(xiàn))這樣的數(shù)據(jù)時(shí),B樹會(huì)先比較名字,確定下一步的搜索方向 。如果姓名相同,則依次比較年齡和性別,最終得到搜索 。但是當(dāng)(20,F(xiàn))這樣的數(shù)據(jù)沒有名字就來了,B-tree就不知道下一步要查哪個(gè)節(jié)點(diǎn)了,因?yàn)榻⑺阉鳂涞臅r(shí)候名字是第一個(gè)比較因素,你必須根據(jù)名字搜索,才能知道下一步要查哪里 。比如在搜索(張三,F(xiàn))這樣的數(shù)據(jù)時(shí),B樹可以用name指定搜索方向,但是下一個(gè)字段age是缺失的,所以我們只能找到所有名字是張三的數(shù)據(jù),然后匹配性別是F的數(shù)據(jù),這是一個(gè)很重要的性質(zhì),也就是索引最左邊的匹配特征 。
我們來試幾個(gè)例子 。
下圖是三個(gè)字段(a,b,c)的聯(lián)合索引 。索引中數(shù)據(jù)的順序以A ASC、B ASC、C ASC的排序方式存儲(chǔ)在節(jié)點(diǎn)中 。索引先按A域升序排列,A相同則按B域升序排列,B相同則按C域升序排列 。仔細(xì)查看節(jié)點(diǎn)中的每個(gè)數(shù)據(jù) 。
如何正確的使用索引 mysql索引怎么實(shí)現(xiàn)


查詢a=1的記錄
由于頁面中的記錄是以A ASC、B ASC、C ASC的排序方式存儲(chǔ)的,所以A字段是有序的,可以通過二分法快速檢索 。流程如下:
將P1加載到內(nèi)存中在內(nèi)存中對(duì)P1中的記錄采用二分法找,可以確定a=1的記錄位于{1,1,1}和{1,5,1}關(guān)聯(lián)的范圍內(nèi),這兩個(gè)值子節(jié)點(diǎn)分別是P2、P4加載葉子節(jié)點(diǎn)P2,在P2中采用二分法快速找到第一條a=1的記錄,然后通過鏈表向下一條及下一頁開始檢索,直到在P4中找到第一個(gè)不滿足a=1的記錄為止查詢a=1,b=5的記錄 。

推薦閱讀