1. 程式人生 > 其它 >字首索引

字首索引

當欄位型別為字串(varchar、text、longtext 等)時,有時候需要索引很長的字串,這會讓索引變得很大,查詢時會浪費大量的磁碟 IO,影響查詢效率,而且索引是有長度的,最大長度為 768 個位元組,假設你的欄位長度超過了索引的最大長度,那麼你就無法為該欄位建立索引,此時可以只將字串的一部分字首建立索引,這樣可以大大節約索引空間,從而提高索引效率

現有 employee 表,如下所示

為 employee 表的 email 欄位建立長度為 6 的索引(語法如下)

create index idx_email_6 on employee (email(6));

建立成功後的索引如下

索引的 Sub_part 列顯示的是 6 ,代表使用該字串的前 6 位作為字首索引

這裡我們選取了欄位的前 6 個字元作為字首索引,字首的長度會對索引的搜尋效能產生影響嗎,索引的字首選擇多大比較合適呢?

可以根據索引的選擇性來決定,選擇性是指不重複的索引值和表中總記錄數的比值,索引選擇性越高則查詢效率越高,唯一索引的選擇性是 1,這是最好的索引選擇性,效能也是最高的

選擇性計算公式(不重複的資料 / 總數)

// 查詢總記錄數
select count(*) from employee;
// 查詢 email 前 6 位不重複的記錄數
select count(*) from (select count(*) from employee group by substring(email,1,6)) deri;