通過例項理解單列索引、多列索引以及最左字首原則
例項:現在我們想查出滿足以下條件的使用者id:
select `uid` from people where lname`='liu' and `fname`='zhiqun' and `age`=26
因為我們不想掃瞄整表,故考慮用索引。
單列索引:
alter table people add index lname (lname);
將lname列建索引,這樣就把範圍限制在lname='liu'的結果集1上,之後掃瞄結果集1,產生滿足fname='zhiqun'的結果集2,再掃瞄結果集2,找到 age=26的結果集3,即最終結果。
由於建立了lname列的索引,與執行表的完全掃瞄相比,效率提高了很多,但我們要求掃瞄的記錄數量仍舊遠遠超過了實際所需要的。雖然我們可以刪除lname列上的索引,再建立fname或者age 列的索引,但是,不論在哪個列上建立索引搜尋效率仍舊相似。
多列索引:
alter table people add index lname_fname_age (lame,fname,age);
為了提高搜尋效率,我們需要考慮運用多列索引,由於索引檔案以b-tree格式儲存,所以我們不用掃瞄任何記錄,即可得到最終結果。
注:在mysql中執行查詢時,只能使用乙個索引,如果我們在lname,fname,age上分別建索引,執行查詢時,只能使用乙個索引,mysql會選擇乙個最嚴格(獲得結果集記錄數最少)的索引。
最左字首:顧名思義,就是最左優先,上例中我們建立了lname_fname_age多列索引,相當於建立了(lname)單列索引,(lname,fname)組合索引以及(lname,fname,age)組合索引。
注:在建立多列索引時,要根據業務需求,where子句中使用最頻繁的一列放在最左邊。
mysql索引最左原則
create table user id int 10 unsigned not null auto increment,name varchar 10 default null,tinyint 1 default null,age tinyint 2 default null,primary ke...
mysql最左字首 mysql索引之最左字首法則
1 最左字首法則 如果你的索引有多個字段,如圖1所示,索引欄位有 kq time,card no,kq type這三個字段 最左字首就是按這三個欄位的前後順序進行排序的 如果是三個查詢條件中三個欄位都用到了,如圖二 嚴格按照最左字首原則,查詢條件順序是使用了三個字段 kq time,card no,...
mysql 索引最左原則原理
索引本質是一棵b tree,聯合索引 col1,col2,col3 也是。其非葉子節點儲存的是第乙個關鍵字的索引,而葉節點儲存的則是三個關鍵字col1 col2 col3三個關鍵字的資料,且按照col1 col2 col3的順序進行排序。圖以innodb引擎為例,對應位址指的是資料記錄的位址 聯合索...