一、如何建立理想的索引?

  • 查询频繁度
  • 区分度
  • 索引长度
  • 覆盖字段

1.1区分度

假设100万用户,性别基本上男/女各为50W, 区分度就低。

1.2长度小

索引长度直接影响索引文件的大小,影响增删改的速度,并间接影响查询速度(占用内存多).

1.3区分度高,长度小

如何让区分度高,而长度小?

可以针对列中的值,从左往右截取部分,来建索引

  • 截的越短,重复度越高,区分度越小, 索引效果越不好。
  • 截的越长,重复度越低,区分度越高,索引效果越好,但带来的影响也越大–增删改变慢,并间影响查询速度。

所以,我们要在 区分度 + 长度两者上,取得一个平衡。惯用手法:截取不同长度,并测试其区分度。

假设我们有一张表:英语4级的单词表,里面有13324条记录,我们怎么给name字段加索引呢?

如果计算区分度?

截取单词第1位的不重复数:

select count(distinct left(name,1)) from dict

总的数量:

select count(*) from dict

区分度:不重复数/总的数量,sql语句如下:

select (select count(distinct left(name,1)) from dict) / (select count(*) from dict) as rate;

然后按照这样的步骤把其他长度所对应的区分度给找出来,看一个这个图表,可以知道当长度为11的时候重复度仅仅为1%,我们可以考虑建立11位长的索引

alter table dict add index name name(11);

1.4左前缀不好区分的情况

如url列

http://www.baidu.com

http://www.web-bc.cn

列的前11个字符都是一样的,不易区分, 可以用如下2个办法来解决

1.4.1把列内容倒过来存储,这样左前缀区分度大,并建立索引

moc.udiab.www//:ptth

nc.cb-bew.www//

最新文章

  1. 学习git与github的二三bug
  2. C语言程序设计第七次作业
  3. Docker 存储设置
  4. crossplatform---Nodejs in Visual Studio Code 07.学习Oracle
  5. 多线程&多进程解析:Python、os、sys、Queue、multiprocessing、threading
  6. C# ACM poj1008
  7. 如何解决Windows 7的多重网络问题
  8. OCP准备记录
  9. WebApi服务
  10. Android含文档server结束(client UI接口异步请求的一部分)三
  11. panel 绑定鼠标滚轮事件
  12. C#的内存管理原理解析+标准Dispose模式的实现
  13. [0] (VDP)垂直开发模式
  14. C语言程序设计第一次作业 冯亚杰
  15. CAS实现单点登录SSO执行原理及部署
  16. Syncfusion HTMLUI研究一
  17. 如何停止和禁用Linux系统中的不需要的服务
  18. Getting Started with Processing 第五章的easing问题
  19. 20165326 java第七周学习笔记
  20. HAOI2017 新型城市化 二分图的最大独立集+最大流+强连通缩点

热门文章

  1. java xml的读取与写入(dom)
  2. Zeus,一个可以快速使用微服务组件
  3. $bzoj3872\ [Poi2014]\ Ant\ colony$ 二分+$dp$
  4. 【DDD】持久化领域对象的方法实践
  5. 前端面试基础回顾之深入JS继承
  6. java 实现敏感词(sensitive word)工具详解使用说明
  7. 基于Jenkins的持续交付全流程设计与实践
  8. Vim区块选择
  9. Scala实践6
  10. python字典的遍历