組合索引多字段是有序的,並且是個完整的btree 索引,有最左原則。
最左原則:
多列索引是先按照第一列進行排序,然後在第一列排好序的基礎上再對第二列排序,如果沒有第一列的話,直接訪問第二列,那第二列肯定是無序的,直接訪問後面的列就用不到索引了。
搜尋需要從根節點出發,上層節點對應靠左的值,搜尋需要從根節點出發,否則不從根節點出發,後面的節點對應下層的值,依舊是亂序的,需要遍歷,所以索引就失效了,所以有最左原則。
組合索引舉例:
create table mytable(
id int not null,
username varchar(16) not null,
city varchar(50) not null,
age int not null
);
就是將 name, city, age建到乙個索引裡:
alter table mytable add index name_city_age (name(10),city,age);
建表時,usernname長度為 16,這裡用 10。這是因為一般情況下名字的長度不會超過10,這樣會加速索引查詢速度,還會減少索引檔案的大小,提高insert的更新速度。
如果分別在 usernname,city,age上建立單列索引,讓該錶有3個單列索引,查詢時和上述的組合索引效率也會大不一樣,遠遠低於我們的組合索引。雖然此時有了三個索引,但mysql只能用到其中的那個它認為似乎是最有效率的單列索引。
建立這樣的組合索引,其實是相當於分別建立了下面三組組合索引:
usernname,city,age
usernname,city
usernname
為什麼沒有 city,age這樣的組合索引呢?這是因為mysql組合索引「最左字首」的結果。
資料庫組合索引
2018 03 12面試中的問題 組合索引是什麼?組合索引建立的原則。b樹和b 樹的區別。一次查詢只能用到乙個索引,所以 首先槍斃 a,b各建索引方案a還是b?誰的區分度更高 同值的最少 建誰!當然,聯合索引也是個不錯的方案,ab,還是ba,則同上,區分度高者,在前 索引用於快速找出在某個列中有一特...
資料庫 資料庫索引
索引是儲存引擎用於快速找到記錄的一種資料結構。索引以檔案的形式儲存在磁碟中。索引可以包含乙個或多個列的值。儲存引擎查詢資料的時候,先在索引中找對應值,然後根據匹配的索引記錄找到對應的資料行。1.b tree索引 2.雜湊索引 myisam和innodb儲存引擎 只支援btree索引,也就是說預設使用...
資料庫mysql索引 資料庫 mysql索引
mysql 索引 mysql索引的建立對於mysql的高效執行是很重要的,索引可以大大提高mysql的檢索速度。打個比方,如果合理的設計且使用索引的mysql是一輛蘭博基尼的話,那麼沒有設計和使用索引的mysql就是乙個人力三輪車。索引分單列索引和組合索引。單列索引,即乙個索引只包含單個列,乙個表可...