mysql中索引长度与区分度的选择(转)

问题背景
现在有这么一个需求,比如说商品表中的商品名称和商品描述两个字段,有时候我们根据商品名称或者描述来查询商品,但是所有的名称或者商品描述又不同,其内容长度又长短不一,但是商品名称或者描述又是经常查询的字段,我们怎样给商品描述或者商品名称添加索引哪?也就是说在商品名称或者商品描述上面的索引长度应该设置多长最合适哪?
区分度与索引长度的权衡
索引长度越低,索引在内存中占的长度越小,排序越快,然而区分度就越低。这样不利于查找。

索引长度越长,区分度就高,虽然利于查找了,但是索引在内存中占得空间就多了。

解决方案
比如说,现在有一个商品表,表名为item,里面有一个商品名称字段,字段名称为title。

查询该字段中,内容最长的一条记录占多少个字节(注意:在mysql中,utf8编码格式下,一个汉字占一个字符,一个字符有三个字节长度)。

    select length(max(title)) from item limit 0,1;
1
2


查询该字段中,内容最短的一条记录占多少个字节
   select length(min(title)) from item limit 0,1;
1
2


查询title中从左边数第一个不重复的汉字(也就是一个字符)有多少行
 select count(distinct left(title,1)) from item;
1
2
计算title中,从左边数第10个不重复的汉字的行数与总行数的比
select count(distinct left(title,10))/count(*) from item;
1
 
上面这个比值,也算是区分度,也可以算作索引长度测试值,多测试几组,找出最合适的来,一般的区分值在0.1左右就差不多了。下面是我测试结果的曲线图。 


小结
多做几组测试,这样就能测试出来结果,逐渐的权衡索引长度与区分度之间的比例,此方法是优化索引良策啊,如果读者还有其他方法,请多多指教。
--------------------- 
作者:周坤_66 
来源:CSDN 
原文:https://blog.csdn.net/zhoukun1008/article/details/68942893 
版权声明:本文为博主原创文章,转载请附上博文链接!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值