最左字首匹配原則
之所以會有最左字首匹配原則和聯合索引的索引構建方式及儲存結構是有關係的。
首先我們建立的index_bcd(b,c,d)索引,相當於建立了(b)、(b、c)(b、c、d)三個索引,看完下面你就知道為什麼相當於建立了三個索引。
我們看,聯合索引是首先使用多列索引的第一列構建的索引樹,用上面idx_t1_bcd(b,c,d)的例子就是優先使用b列構建,當b列值相等時再以c列排序,若c列的值也相等則以d列排序。我們可以取出索引樹的葉子節點看一下。
索引的第一列也就是b列可以說是從左到右單調遞增的,但我們看c列和d列並沒有這個特性,它們只能在b列值相等的情況下這個小範圍內遞增,如第一葉子節點的第1、2個元素和第二個葉子節點的後三個元素。
由於聯合索引是上述那樣的索引構建方式及儲存結構,所以聯合索引只能從多列索引的第一列開始查詢。所以如果你的查詢條件不包含b列如(c,d)、(c)、(d)是無法應用快取的,以及跨列也是無法完全用到索引如(b,d),只會用到b列索引。
這就像我們的**本一樣,有名和姓以及**,名和姓就是聯合索引。在姓可以以姓的首字母排序,姓的首字母相同的情況下,再以名的首字母排序。如:m
毛 不易 178********
馬 化騰 183********
馬 雲 188********
z張 傑 189********
張 靚穎 138********
張 藝興 176********
複製**我們知道名和姓是很快就能夠從姓的首字母索引定位到姓,然後定位到名,進而找到**號碼,因為所有的姓從上到下按照既定的規則(首字母排序)是有序的,而名是在姓的首字母一定的條件下也是按照名的首字母排序的,但是整體來看,所有的名放在一起是無序的,所以如果只知道名查詢起來就比較慢,因為無法用已排好的結構快速查詢。
到這裡大家是否明白了為啥會有最左字首匹配原則了吧。
聯合索引和最左字首原則
1 也稱多列索引 復合索引。2 聯合索引就是把多個列按照順序放到乙個索引樹上。3 乙個索引上最多可以建16列。4 聯合索引可以看成排好序的陣列。排序規則是 先按照第乙個列進行排序,第二列再按照第一列排好序的基礎上再進行排序,依次類推 5 需要按照最左字首原則才能生效 最左字首原則 按照最左邊的列開始...
mysql中索引最左字首 索引最左字首匹配原則
如果索引字串的前面n個字元都不相同,那麼最好不要索引整個資料列,二十索引前n個字元,這樣可以節省大量空間。如果在資料列a,b,c上建立了復合索引,索引中的資料行按照a b c次序排列,因此資料表會自動的按照a b和a排列,即使指定了a,或者a和b的值,mysql也可以使用這個索引。這個索引可以用於如...
mysql最左字首 mysql索引之最左字首法則
1 最左字首法則 如果你的索引有多個字段,如圖1所示,索引欄位有 kq time,card no,kq type這三個字段 最左字首就是按這三個欄位的前後順序進行排序的 如果是三個查詢條件中三個欄位都用到了,如圖二 嚴格按照最左字首原則,查詢條件順序是使用了三個字段 kq time,card no,...