mysql中索引长度与区分度的选择
来源:互联网 发布:极客学院python百度云 编辑:程序博客网 时间:2024/05/16 14:27
问题背景
- 现在有这么一个需求,比如说商品表中的商品名称和商品描述两个字段,有时候我们根据商品名称或者描述来查询商品,但是所有的名称或者商品描述又不同,其内容长度又长短不一,但是商品名称或者描述又是经常查询的字段,我们怎样给商品描述或者商品名称添加索引哪?也就是说在商品名称或者商品描述上面的索引长度应该设置多长最合适哪?
区分度与索引长度的权衡
索引长度越低,索引在内存中占的长度越小,排序越快,然而区分度就越低。这样不利于查找。
索引长度越长,区分度就高,虽然利于查找了,但是索引在内存中占得空间就多了。
解决方案
比如说,现在有一个商品表,表名为item,里面有一个商品名称字段,字段名称为title。
查询该字段中,内容最长的一条记录占多少个字节(注意:在mysql中,utf8编码格式下,一个汉字占一个字符,一个字符有三个字节长度)。
select length(max(title)) from item limit 0,1;
- 查询该字段中,内容最短的一条记录占多少个字节
select length(min(title)) from item limit 0,1;
- 查询title中从左边数第一个不重复的汉字(也就是一个字符)有多少行
select count(distinct left(title,1)) from item;
- 计算title中,从左边数第10个不重复的汉字的行数与总行数的比
select count(distinct left(title,10))/count(*) from item;
上面这个比值,也算是区分度,也可以算作索引长度测试值,多测试几组,找出最合适的来,一般的区分值在0.1左右就差不多了。下面是我测试结果的曲线图。
小结
- 多做几组测试,这样就能测试出来结果,逐渐的权衡索引长度与区分度之间的比例,此方法是优化索引良策啊,如果读者还有其他方法,请多多指教。
1 0
- mysql中索引长度与区分度的选择
- 索引长度与区分度
- 索引长度与区分度
- 索引长度与区分度
- MySQL中计算索引长度
- mysql设计索引的原则与索引的选择
- mysql索引的长度问题
- MySQL索引的索引长度问题
- MySQL索引的索引长度问题
- MySQL中索引的创建与使用
- mysql索引字段长度的问题
- mysql索引长度的一些限制
- MySql之索引长度
- mysql索引长度
- MySQL单列索引和组合索引的选择效率与explain分析
- MySQL单列索引和组合索引的选择效率与explain分析(没图)
- MySQL单列索引和组合索引的选择效率与explain分析
- 搜索引擎中影响索引长度的因素
- 数学模板-逆元
- node.js Express 常用方法接口大全
- 浅谈CAS
- Android cer ssl 安全证书 https Android(cacerts.bks)添加根证书
- javaEE在线程序测试系统开发--持续更新
- mysql中索引长度与区分度的选择
- 黑帽SEO和白帽SEO有什么区别?
- 同步,异步,阻塞,非阻塞的区别
- Docker容器网络包丢失之NAT
- JavaScript 快速入门
- 设计模式-依赖倒置
- 有关core data有关Codegen使用过程中出现的问题
- 数学模板-BSGS&&EXBSGS
- rails db:migrate:reset 或者 rails db:rest失败 (rails 5)报错(Permission denied、Couldn't drop database)