理想的索引
索引長度直接影響索引檔案的大小,影響增刪改的速度,並間接影響查詢速度(占用記憶體多).
針對列中的值,從左往右擷取部分,來建索引
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 將...