-
mysql中索引长度与区分度的选择
2020-07-04 19:42:22问题背景 现在有这么一个需求,比如说商品表中的商品名称和商品描述两个字段,有时候我们根据商品名称或者描述来查询商品,但是所有的...索引长度越长,区分度就高,虽然利于查找了,但是索引在内存中占得空间就多了。问题背景
现在有这么一个需求,比如说商品表中的商品名称和商品描述两个字段,有时候我们根据商品名称或者描述来查询商品,但是所有的名称或者商品描述又不同,其内容长度又长短不一,但是商品名称或者描述又是经常查询的字段,我们怎样给商品描述或者商品名称添加索引哪?也就是说在商品名称或者商品描述上面的索引长度应该设置多长最合适哪?
区分度与索引长度的权衡
索引长度越低,索引在内存中占的长度越小,排序越快,然而区分度就越低。这样不利于查找。索引长度越长,区分度就高,虽然利于查找了,但是索引在内存中占得空间就多了。
解决方案
比如说,现在有一个商品表,表名为item,里面有一个商品名称字段,字段名称为title。查询该字段中,内容最长的一条记录占多少个字节(注意:在mysql中,utf8编码格式下,一个汉字占一个字符,一个字符有三个字节长度)。
select length(max(title)) from item limit 0,1;
查询该字段中,内容最短的一条记录占多少个字节
select length(min(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左右就差不多了。下面是我测试结果的曲线图。
小结
- 多做几组测试,这样就能测试出来结果,逐渐的权衡索引长度与区分度之间的比例,此方法是优化索引良策啊,如果读者还有其他方法,请多多指教。
-
-
-
-
php高级开发教程说明
2008-11-27 11:39:22下载 第1章开发思想 命名是所有事的开始。 要真正掌握一门编程语言,不仅要理解它的...越快、越好。 逻辑分析能补偿形式分析中失去的信息,但仅仅是在一个有限的程度上补偿。 你也许能读懂前面的这个句子,但要花费比... -
你必须知道的495个C语言问题
2015-10-16 14:14:28可我找不到任何方法来声明这样的函数——感觉我需要一个返回指针的函数,返回的指针指向的又是返回指针的函数……,如此往复,以至无穷。 数组大小 1.23 能否声明和传入数组大小一致的局部数组,或者由其他参数指定... -
《你必须知道的495个C语言问题》
2010-03-20 16:41:18可我找不到任何方法来声明这样的函数——感觉我需要一个返回指针的函数,返回的指针指向的又是返回指针的函数……,如此往复,以至无穷。 12 数组大小 13 1.23 能否声明和传入数组大小一致的局部数组,或者由... -
你必须知道的495个C语言问题(高清版)
2010-03-31 16:24:09可我找不到任何方法来声明这样的函数——感觉我需要一个返回指针的函数,返回的指针指向的又是返回指针的函数……,如此往复,以至无穷。 12 数组大小 13 1.23 能否声明和传入数组大小一致的局部数组,或者由... -
C语言FAQ 常见问题列表
2010-10-28 16:41:29o 7.9 既然数组引用会蜕化为指针, 如果 arr 是数组, 那么 arr 和 &arr 又有什么区别呢 ? o 7.10 我如何声明一个数组指针 ? o 7.11 我如何在运行期设定数组的大小 ? 我怎样才能避免固定大小的数组 ? o 7.12 ... -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
你必须知道的495个C语言问题(PDF)
2009-09-15 10:25:47然后又使用一些内存分配技巧使namestr 数组用起 来好像有多个元素。这样合法和可移植吗? . . . . . . . . . . . . 8 2.7 是否有自动比较结构的方法? . . . . . . . . . . . . . . . . . . . . 8 2.8 如何向接受...
收藏数
71
精华内容
28
-
深究字符编码的奥秘,与乱码说再见
-
leetcode算法第5题
-
WLAN中共存的802.11a / n和802.11ac客户端:优化和区分
-
Galera 高可用 MySQL 集群(PXC v5.7+Hapro)
-
无线计算卸载的能量和时间优化
-
【学习札记NO.00004】Linux Kernel Pwn学习笔记 I:一切开始之前
-
Galera 高可用 MySQL 集群(PXC v5.6 + Ngin
-
通过加速或跳过网页视频解决进度条无法拖动问题
-
MySQL你该了解的那些事【服务端篇】
-
Arduino Timer 用法注意事项
-
CentOS 7 下修改主机名
-
设计需求分析方法与过程
-
APPKIT打造稳定、灵活、高效的运营配置平台
-
物联网之mqtt实现(emqx+springboot+mqtt附源码)
-
《让心灵洒满阳光》读后感
-
需求分析与建模最佳实践
-
龙芯生态应用开发基础:C语言精要
-
2017年上半年 信息系统监理师 上午试卷 综合知识 软考真题【含答案和答案解析】
-
电影记录-源码
-
Samba 服务配置与管理