mysql 索引長度與區分度的選擇

2021-09-11 01:46:59 字數 1509 閱讀 7109

理想的索引

索引長度直接影響索引檔案的大小,影響增刪改的速度,並間接影響查詢速度(占用記憶體多).

針對列中的值,從左往右擷取部分,來建索引

1: 截的越短, 重複度越高,區分度越小, 索引效果越不好

2: 截的越長, 重複度越低,區分度越高, 索引效果越好,但帶來的影響也越大--增刪改變慢,併間影響查詢速度.

所以, 我們要在  區分度 + 長度  兩者上,取得乙個平衡.

慣用手法: 擷取不同長度,並測試其區分度

案例:這裡準備了一張表,其表結構如下

索引情況如下:

在生產環境中,經常需要使用到dye_vat這個欄位來查詢,那麼這個欄位該怎麼建立索引比較合理呢?

這裡我們依據,字元長度和區分度來計算怎麼建索引比較合理!

可以看到在這個25141條記錄的表中,當字元長度為13時,區分度是最高的,但是後面也看到了,現有表dye_vat 這個字段最大長度也才13,所以我們建立索引的時候不可能以13字元長度建立索引( 就目前來看不太合理) 。

將以上資料,通過excel 分析

由上表可以看出,將索引長度建在8-11 是比較合理的,這裡我們將索引長度選擇在10,建立索引。

建立索引:

這裡說下ken_len :32 是怎麼來的,在utf8 下乙個字元佔3個位元組,我們的索引dye_vat 是10個長度的,所以 3 * 10 ,加上varchar型別長度會保留1~2 位元組。

在我這個案例中,索引長度選擇為了10,這個案例中,辨識度普遍較低,可能是由於資料問題(資料不夠多之類的),在遇到要對字串建立索引這類問題中,一般要看業務場景,具體問題具體分析。

注:對於一般的系統應用: 區別度能達到0.1,索引的效能就可以接受。

mysql 索引長度和區分度

首先 索引長度和區分度是相互矛盾的,索引長度太短,那麼區分度就很低,吧索引長度加長,區分度就高,但是索引也是要佔記憶體的,所以我們需要找到乙個平衡點 那麼這個平衡點怎麼來定?比如使用者表有個字段 username 要給他加索引,問題是索引長度多少合適?其實我們知道 百家姓裡面有百多個姓 但是大多數人...

MySQL 索引長度和區分度

首先 索引長度和區分度是相互矛盾的,索引長度太短,那麼區分度就很低,吧索引長度加長,區分度就高,但是索引也是要佔記憶體的,所以我們需要找到乙個平衡點 那麼這個平衡點怎麼來定?比如使用者表有個字段 username 要給他加索引,問題是索引長度多少合適?其實我們知道 百家姓裡面有百多個姓 但是大多數人...

mysql索引原則 區分度 MySQL索引設計原則

1.最左字首原則 一般在where條件中兩個及以上欄位時,我們會建聯合索引。若查詢語句 select name,address,country from people where name and country 索引建立有下面兩種方案 a name,country b country,name 將...