字段的区分度与(字符串类型字段)索引长度

  字段的区分度就是该字段不重复记录数和总记录数的比值,比值的区间是(0.0000, 1.0000],区分度可以帮我们确认该字段是否适合建立索引,区分度越趋近1则越适合在该字段建立索引,类似性别这种只有两种可能值的字段就不适合建立索引,因为当总记录数足够大时区分度会趋近于0。

-- ----------------------------
-- 求指定字段的区分度
-- ----------------------------
SELECT
  COUNT(DISTINCT (`字段名`)) / COUNT(*) AS `discrimination`
FROM
  `表名`;

  对于字符串类型字段在建立索引时需要计算区分度来确定合适的索引长度,区分度计算公式如下:
 
  discrimination = COUNT(DISTINCT LEFT(`字段名`, key_len)) / COUNT(*)
 
  其中key_len为索引长度,区分度和索引长度是一对矛盾体,区分度越高索引长度也要越长,从而维护索引的成本也越高,所以在给字符串类型字段建立索引时要平衡区分度和索引长度,选择一个合适的索引长度。
 
  以X轴为索引长度,Y轴为区分度,建立一个坐标系,通过上面的计算公式取点画出一个大致折线,当折线开始走平时就是比较合理的索引长度。

Copyright © 2023 码农人生. All Rights Reserved