加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

详解MySQL索引长度和区分度之间的均衡,值得保藏

发布时间:2019-07-24 11:25:31 所属栏目:编程 来源:波波说运维
导读:概述 前面我们讲了怎么去计较索引所占用的长度?那么换个方法想?索引又应该配置几多长度较量公道呢? 区分度与索引长度的衡量 起首索引长度和区分度是彼此抵牾的, 索引长度太短,那么区分度就很低,吧索引长度加长,区分度就高,可是索引也是要占内存的,所

详解MySQL索引长度和区分度之间的均衡,值得保藏

概述

前面我们讲了怎么去计较索引所占用的长度?那么换个方法想?索引又应该配置几多长度较量公道呢?

详解MySQL索引长度和区分度之间的均衡,值得保藏

区分度与索引长度的衡量

起首索引长度和区分度是彼此抵牾的,

索引长度太短,那么区分度就很低,吧索引长度加长,区分度就高,可是索引也是要占内存的,以是我们必要找到一个均衡点;

那么这个均衡点怎么来定?

好比用户表有个字段 username ,要给他加索引,题目是索引长度几多吻合?

着实我们知道 百家姓内里有百多个姓 ,可是大大都人的姓 齐集在前十多个;假如我配置索引索引长度为1,占内存少,可是区分度低,区分度低索引的服从越低。太长则占内存;

起首 mysql的索引都是排好序的。假如区分度高排序越快,区分度越低,排序慢;

举个例子: (张,张三,张三哥),假如索引长度取1的话,那么每一行的索引都是 张 这个字,完全没有区分度,你让他怎么排序?功效这样三行完满是随机排的,由于索引都一样;假如长度取2,那么排序的时辰至少前两个是排对了的,假如取3,区分度到达100%,排序完全正确;

那是不是索引越长越好? 谜底必定是错的,好比 (张,李,王) 和 (张三啦啦啦,张三呵呵呵,张三呼呼呼);前者在内存中排序占得空间少,排序也快,后者明明更慢更占内存。

总之:

索引长度越低,索引在内存中占的长度越小,排序越快,然而区分度就越低。这样倒霉于查找。

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

mysql建设索引的时辰指定索引长度

大部门的索引前面一部门的长度就可以或许有很好的区分度了。

通过减小索引长度,这样可以或许减小索引文件的巨细,可以或许加速数据的insert。

语法:

  1. CREATE INDEX index_name ON table_name (column_name(length), clolumn_name(length)…); 

怎样确认当前字段配置一个吻合的长度呢?

索引长度与区分度要做一个弃取;这个弃取不是没有一个牢靠的量;必要按照数据库内里的数据来判定;较量通例的公式是:

  1. select count(distinct left(password, 5))/count(*) from user 

个中password是要加索引的字段,5是索引长度,求出一个浮点数,这个浮点数是逐渐趋向1的,上面这个比值,也算是区分度,也可以算作索引长度测试值,多测试几组,找出最吻合的来,一样平常的区分值在0.1阁下就差不多了。

网上找了个图片来说明下;

详解MySQL索引长度和区分度之间的均衡,值得保藏

这个处所调查到,当索引长度到达4的时辰就已经趋向1了,以是长度设为4是最佳的,在大点增进的索引结果已经很小了,这个处所不是说必需靠近1才行;总之要找一个均衡点;

尚有一些非凡的字段通例要领用起不太顺畅,好比有一个url字段,绝大部门的url都是 http://www. 开头的,这种环境下索引长度取取到11都是无效的,必要更长的索引,那么有没有优雅的方法来办理呢;

  • 第一种要领: 可以将数据倒序存入数据库;
  • 第二种要领:对字符串举办crc32哈希处理赏罚;

两种要领都不错,虽然要共同客户端措施完成;

简朴测试:

详解MySQL索引长度和区分度之间的均衡,值得保藏

这个要领也许是优化最后才思量的点了,不提议过分穷究,相识到这就行了。后头会分享更多devops和DBA方面的内容,感乐趣的伴侣可以存眷一下~

【编辑保举】

  1. 优化系统 | 我是怎么计较MySQL数据库索引长度的?
  2. MariaDB:真正的及时同步数据库,MySQL要警惕了
  3. 怎样选择高机能NoSQL数据库
  4. 挑衅 Oracle 的环球首个 AI 原生数据库 GaussDB,华为将开源
  5. 记一次出产情形Mysql数据库参数优化,值得保藏
【责任编辑:华轩 TEL:(010)68476606】
点赞 0

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读