聯合索引是指對錶上的多個列進行索引,聯合索引也是一棵b+樹,不同的是聯合索引的鍵值數量不是1,而是大於等於2.
最左匹配原則
假定上圖聯合索引的為(a,b)。聯合索引也是一棵b+樹,不同的是b+樹在對索引a排序的基礎上,對索引b排序。所以資料按照(1,1),(1,2)......順序排放。
對於selete * from table where a=xx and b=xx,顯然是可以使用(a,b)聯合索引的,
對於selete * from table where a=xx,也是可以使用(a,b)聯合索引的。因為在這兩種情況下,葉子節點中的資料都是有序的。
但是,對於b列的查詢,selete * from table where b=xx。則不可以使用這棵b+樹索引。可以發現葉子節點的b值為1,2,1,4,1,2。顯然不是有序的,因此不能使用(a,b)聯合索引。
by the way:selete * from table where b=xx and a=xx,也是可以使用到聯合索引的,你可能會有疑問,這條語句並不符合最左匹配原則。這是由於查詢優化器的存在,mysql查詢優化器會判斷糾正這條sql語句該以什麼樣的順序執行效率最高,最後才生成真正的執行計畫。所以,當然是我們能盡量的利用到索引時的查詢順序效率最高咯,所以mysql查詢優化器會最終以這種順序進行查詢執行。
優化:在聯合索引中將選擇性最高的列放在索引最前面。
例如:在乙個公司裡以age 和gender為索引,顯然age要放在前面,因為性別就兩種選擇男或女,選擇性不如age。
Mysql的列索引和多列索引(聯合索引)
建立乙個多列索引 create table test id int not null,last name char 30 not null,first name char 30 not null,primary key id index name last name,first name 建立多個索...
Mysql的列索引和多列索引(聯合索引)
建立乙個多列索引 create table test id int not null,last name char 30 not null,first name char 30 not null,primary key id index name last name,first name 建立多個索...
mysql多列索引 MySQL的多列索引
什麼是索引?索引用來快速地尋找那些具有特定值的記錄,所有mysql索引都以b 樹的形式儲存。如果沒有索引,執行查詢時mysql必須從第乙個記錄開始掃瞄整個表的所有記錄,直至找到符合要求的記錄。表裡面的記錄數量越多,這個操作的代價就越高。如果作為搜尋條件的列上已經建立了索引,mysql無需掃瞄任何記錄...