理想的索引
- 查詢頻繁
- 區分度高
- 長度小
- 儘量能覆蓋常用查詢字段
索引長度直接影響索引文件的大小,影響增刪改的速度,並間接影響查詢速度(佔用內存多).
針對列中的值,從左往右截取部分,來建索引
1: 截的越短, 重複度越高,區分度越小, 索引效果越不好
2: 截的越長, 重複度越低,區分度越高, 索引效果越好,但帶來的影響也越大--增刪改變慢,並間影響查詢速度.
所以, 我們要在 區分度 + 長度 兩者上,取得一個平衡.
慣用手法: 截取不同長度,並測試其區分度
案例:
這裏準備了一張表,其表結構如下
索引情況如下:
在生產環境中,經常需要使用到dye_vat這個字段來查詢,那麼這個字段該怎麼建立索引比較合理呢?
這裏我們依據,字符長度和區分度來計算怎麼建索引比較合理!
可以看到在這個25141條記錄的表中,當字符長度爲13時,區分度是最高的,但是後面也看到了,現有表dye_vat 這個字段最大長度也才13,所以我們建立索引的時候不可能以13字符長度建立索引( 就目前來看不太合理) 。
將以上數據,通過excel 分析
由上表可以看出,將索引長度建在8-11 是比較合理的,這裏我們將索引長度選擇在10,建立索引。
建立索引:
alter table dye_stock_picode add index dye_vat(dye_vat(10));
這裏說下ken_len :32 是怎麼來的,在utf8 下一個字符佔3個字節,我們的索引dye_vat 是10個長度的,所以 3 * 10 ,加上varchar類型長度會保留1~2 字節。
在我這個案例中,索引長度選擇爲了10,這個案例中,辨識度普遍較低,可能是由於數據問題(數據不夠多之類的),在遇到要對字符串建立索引這類問題中,一般要看業務場景,具體問題具體分析。
注:對於一般的系統應用: 區別度能達到0.1,索引的性能就可以接受。