mysql的組合索引 mysql 組合索引

2021-10-17 22:43:02 字數 1713 閱讀 4156

mysql單列索引是我們使用mysql資料庫中經常會見到的,mysql單列索引和組合索引的區別可能有很多人還不是十分的了解,下面就為您分析兩者的主要區別,供您參考學習。

為了形象地對比兩者,再建乙個表:

create table myindex ( i_testid int not null auto_increment,

vc_name varchar(50) not null,

vc_city varchar(50) not null, i_age int not null, i_schoolid int not null,

primary key (i_testid) );

在這 10000 條記錄裡面 7 上 8 下地分布了 5 條 vc_name="erquan" 的記錄,只不過 city,age,school 的組合各不相同。

來看這條t-sql:

select i_testid from myindex where vc_name='erquan' and vc_city='鄭州' and i_age=25;

首先考慮建mysql單列索引:

在vc_name列上建立了索引。執行 t-sql 時,mysql 很快將目標鎖定在了vc_name=erquan 的 5 條記錄上,取出來放到一中間結果集。在這個結果集裡,先排除掉 vc_city 不等於"鄭州"的記錄,再排除 i_age 不等於 25 的記錄,最後篩選出唯一的符合條件的記錄。

雖然在 vc_name 上建立了索引,查詢時mysql不用掃瞄整張表,效率有所提高,但離我們的要求還有一定的距離。同樣的,在 vc_city 和 i_age 分別建立的mysql單列索引的效率相似。

為了進一步榨取 mysql 的效率,就要考慮建立組合索引。就是將 vc_name,vc_city,i_age 建到乙個索引裡:

alter table myindex add index name_city_age (vc_name(10),vc_city,i_age);

建表時,vc_name 長度為 50,這裡為什麼用 10 呢?因為一般情況下名字的長度不會超過 10,這樣會加速索引查詢速度,還會減少索引檔案的大小,提高 insert 的更新速度。

執行 t-sql 時,mysql 無須掃瞄任何記錄就到找到唯一的記錄。

肯定有人要問了,如果分別在 vc_name,vc_city,i_age 上建立單列索引,讓該錶有 3 個單列索引,查詢時和上述的組合索引效率一樣嗎?大不一樣,遠遠低於我們的組合索引。雖然此時有了三個索引,但 mysql 只能用到其中的那個它認為似乎是最有效率的單列索引。

建立這樣的組合索引,其實是相當於分別建立了

vc_name,vc_city,i_age vc_name,vc_city vc_name

這樣的三個組合索引!為什麼沒有 vc_city,i_age 等這樣的組合索引呢?這是因為 mysql 組合索引「最左字首」的結果。簡單的理解就是只從最左面的開始組合。並不是只要包含這三列的查詢都會用到該組合索引,下面的幾個 t-sql 會用到:

select * from myindex whree vc_name="erquan" and vc_city="鄭州"

select * from myindex whree vc_name="erquan"

而下面幾個則不會用到:

select * from myindex whree i_age=20 and vc_city="鄭州"

select * from myindex whree vc_city="鄭州"

mysql組合索引 Mysql之組合索引方法詳解

對於任何dbms,索引都是進行優化的最主要的因素。對於少量的資料,沒有合適的索引影響不是很大,但是,當隨著資料量的增加,效能會急劇下降。如果對多列進行索引 組合索引 列的順序非常重要,mysql僅能對索引最左邊的字首進行有效的查詢。例如 假設存在組合索引 c1,c2 查詢語句select from ...

mysql 組合索引

使用好組合索引能大大提高查詢的效率 key a1,a2,a3 組合索引可以理解為從左到右依次命中,按順序,查詢命中的越多,效率越高 a1,a2,a3的順序很關鍵,能更好的區分資料的字段放在前面。如果查詢中沒有使用欄位a2或者查詢是 a2,則a2索引不能被使用,a3索引也隨之不能被使用。例如有如下組合...

mysql聚合索引 組合索引

索引 排好序的快速查詢資料結構。在資料之外,資料庫系統還維護著滿足特定查詢演算法的資料結構,這些資料結構以某種方式引用 指向 資料,這樣就可以在這些資料結構上實現高階查詢演算法。這種資料結構,就是索引。下圖就是一種可能的索引方式示例 資料本身之外,資料庫還維護著乙個滿足特定查詢演算法的資料結構,這些...