MySQL建立字首索引和索引選擇性

2021-08-19 17:39:54 字數 2222 閱讀 2997

「天忽作晴山卷慢,雲猶含態石披衣」

什麼是字首索引: 一般情況下,如果需要作為索引的那一列長度很長.就需要使用字首索引來節約索引控制項.即只需要為前面幾個字元作為索引.

什麼是索引選擇性: 索引選擇性是指,不重複的索引值(也稱為基數)和資料表的記錄總數(#t)的比值,範圍從1/#t到1之間.索引選擇性越高則查詢效率越高,因為選擇性高的索引可以讓mysql在查詢時過濾掉更多的行.唯一索引的選擇性是1,這是最好的索引選擇性,效能也是最好的.

舉個例子說明:這裡有一張測試表(只截圖其中一列,該列待會要用到),如下:

寫個簡單的查詢:用時0.111秒(這是沒有加字首索引的結果)

下面開始給表加字首索引:

計算索引字首的訣竅在於要選擇足夠長的字首以保證較好的選擇性,同時又不能太長(以便節約空間),字首應該足夠長,以使得字首索引的選擇性接近於索引整個列.話句話說,字首的」基數」應該接近於完整列的」基數」.

計算完整列的基數:

我這裡的結果為0.7864

接下來計算最接近完整列的基數:

這裡算出當字首為25時,該基數等於完整列的基數.

接下來建立長度為25的字首索引.

alter

table tablename add

key (id_address(25));

建立完成之後,再來執行剛才耗時0.111秒的語句,看耗時多少.

這次只耗時0.037秒..可以看出字首索引的效果.

剛才的字首索引是通過算出來的最佳值(長度為25).這次我們來試一下隨機值.設定字首索引長度為15;

alter

table tablename add

key (id_address(15));

再來看下查詢耗時多少.

這次用時0.044秒.由此可見索引縣選擇性的重要性.

mysql 建字首索引 MySQL 字首索引

檢視出現頻率 select count as cnt,city from sakila.city demo group by city order by cnt desc limit 10 1.select count distinct city count from sakila.city dem...

mysql 字首索引 語法 MySQL 字首索引

索引字首 使用 字串列的索引規範中的語法,您可以建立僅使用列首字元的索引 以這種方式僅索引列值的字首可以使索引檔案小得多。為a 或 column 編制索引時 必須為索引指定字首長度。例如 col name n nblobtext create table test blob col blob,ind...

mysql 字首索引 語法 mysql字首索引

應用場景 資料庫裡有個位址 address 字段,型別為varchar 100 業務決定了要經常根據address來進行查詢。確定選擇性 sql select count distinct address count as selectivity from info selectivity 0.87...