创建索引的目的是快速从整体集合中选择性地读取满足条件的一部分集合。在查询条件中既有对缩减查询范围起主要作用的驱动查询条件,也有单纯起检验作用的过滤查询条件,数据库将全部满足这两种查询条件的最终结果输出给我们。由此可见,虽然获得的最终结果相同,但是随着查询条件所起作用的不同,内部所处理的数据量具有很大的差异。

因此,最理想的方法就是把拥有最小查询范围的条件作为驱动查询条件来使用。这里的最小查询范围也就意味着满足条件的数据在整体中所占的比重较小。所以,基于什么样的条件来创建索引将对缩减处理范围有着较大的影响。对于特定的读取类型,最有效的索引就是基于常量比较的列来创建的组合索引。

离散度在不超过全表的10%-15%的前提下索引才可以显示其所具有的价值。当离散度超过该值的情况下全表扫描可能反倒比索引扫描更有效。我们所追求的目标就是创建全表扫描所无法比拟的有效索引。

假设某个索引的离散度<1%,很明显小于损益分界点,但是在海量表中也不是个小数目,仍然会对在线处理构成极大的负担。如果基于一个列所创建的索引 无法实现预期目标,那么在不得已的情况下也只能基于多个列来创建组合索引。在各个列的离散度不太好的情况下,可以将这些列进行有效的组合,通过合力的有效 使用可以取得意想不到的效果。

为了实现以最少的索引满足对某个表的多样化的数据读取要求,应当为每个索引分配合理的任务。

1)在允许的情况下,对具有较好离散度的列单独创建索引,这样可以提高该索引的使用弹性;

2)对于离散度较差的列,通过对多列进行合理的组合来创建组合索引,虽然这样做在很大程度上降低了各个列的使用弹性,但是却可以发挥多个列的综合效应。

有时候基于离散度较好的列所创建的索引会与其识别能力比较相似的其他索引进行竞争。

如果很容易就能够分辨出查询条件的优劣,则只需要从中选择最好的一个作为驱动查询条件就可以了;但是如果很难分辨,则需要考虑让多个列相互组合来共同负责数据的读取任务,这就是所谓的索引合并(Index Merge)。

只有当合并的索引具有相似的离散度时索引合并才比较有效,当索引的离散度相差较大时使用索引合并的方法反倒容易影响执行效率。在两个索引行数悬殊的情况下,通常只使用其中最好的一个索引来负责读取数据,而另外的索引只负责检验即可。

在实际工作中,经常会遇到即使列的离散度不好也必须要创建索引的情况,为了解决此类问题而需要创建组合索引(Concatenated Index)。所谓的组合索引是指基于多列所创建的索引。在组合索引中执行索引合并时,由于提前将满足条件的行集集中到了一起,所以可以在很大程度上提高 读取数据的速度。

但是组合索引并非总能提高读取速度。只有在查询条件中对索引列使用了等值比较时组合索引才能够有突出的表现。当没有为组合索引中的第一个索引列赋予查询条件时,使用组合索引的效果会骤减,所以它的使用弹性和灵活性在很多条件下都受到限制。

注:离散度可以用 最大行数 - 最小行数 / 总行数 来衡量。

MySQL离散型_数据库索引之离散度相关推荐

  1. 数据库mysql的索引_数据库索引

    数据库索引 编辑 锁定 索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息.如果想按特定职员的姓来查找他或她,则与在表中搜索所有的行相比,索引有助于更快地获取信 ...

  2. mysql 左连接 怎么走索引_数据库索引、左连接、右连接、等值连接

    在MySQL中,主要有四种类型的索引,分别为:B-Tree索引,Hash索引,Fulltext索引(MyISAM 表)和R-Tree索引,本文讲的是B-Tree索引. 一.Mysql索引主要有两种结构 ...

  3. 什么是mysql索引文件_数据库索引文件一般采用什么数据结构?

    展开全部 关于数据库索引的数据结构,636f707962616964757a686964616f31333433633438大多数数据库都是采用B树. 1.非主键索引需要在数据表本身的存储空间外额外开 ...

  4. 新华字典 mysql数据库_数据库索引是什么?新华字典来帮你

    学过服务器端开发的朋友一定知道,程序没有数据库索引也可以运行.但是所有学习数据库的资料.教程,一定会有大量的篇幅在介绍数据库索引,各种后端开发工作的面试也一定绕不开索引,甚至可以说数据库索引是从后端初 ...

  5. 创建了联合索引还用在单个字段上创建索引吗_数据库 索引并不是万能的

    数据库 -- 索引并不是万能的 在这里插入图片描述 索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息.如果想按特定职员的姓来查找他或她,则与在表中搜索所有的行 ...

  6. access建立两个字段唯一索引_数据库索引原理及优化

    微信公众号:云计算通俗讲义 持续输出技术干货,欢迎关注! 通过本文你将了解: 概述 分类 索引底层实现原理 基本操作 索引失效 索引优化 01 概述 索引是帮助MySQL高效获取数据的排好序的数据结构 ...

  7. sql 占比计算_数据库索引的优化及SQL处理过程(建议收藏)

    想要设计出好的索引,首先必须了解SQL语句在数据库服务器中的处理过程,本文介绍 数据库索引设计与优化 中几个对索引优化非常重要的概念. 谓词 谓词就是条件表达式. SQL语句的where子句由一个或者 ...

  8. 聚集索引和非聚集索引的区别底层_数据库-索引相关

    一.什么是索引 在数据库中,索引的含义与日常意义上的"索引"一词并无多大区别(想想小时候查字典),它是用于提高数据库表数据访问速度的数据库对象. 总而言之,索引是一个排序的列表,在 ...

  9. Mysql优化之三:数据库索引原理及优化

    转自:https://blog.csdn.net/suifeng3051/article/details/52669644 Mysql优化主要是索引的优化 1. 平衡多路搜索树B树(B-tree) 上 ...

最新文章

  1. iOS视图控制对象生命周期-init、viewDidLoad、viewWillAppear、viewDidAppear、viewWillDisappear、view...
  2. jQuery操作input
  3. 一个用于 Entity Framework 对象拷贝的方法
  4. 改变手机浏览器(iPhone/Android)上文本输入框的默认弹出键盘
  5. 用思科网络模拟器搭建一个简单的局域网
  6. VTK:绘图之AreaPlot
  7. matlab幂法的瑞利商加速,瑞利商加速定理14.PPT
  8. L-BFGS算法/Broyden族/BFGS算法/阻尼牛顿法的Python实现代码
  9. 计算机盐城工学院和常熟理工,【选专业】这6所二本院校的专业,就业不输一本学生!...
  10. html 给照片添加圆角属性,CSS3新增属性(背景图、边框背景、圆角)
  11. HTML字符实体大全
  12. linux目录与文件
  13. 游戏开发筑基之输出中设置颜色(C语言)
  14. 读书笔记之《Redis开发与运维》—— 一
  15. C#实现秒杀器之网站登录
  16. 《App后台开发运维和架构实践》前言
  17. Python打包exe文件并换图标【最强版教程】
  18. COCO数据集合解析
  19. Go语言的安装与环境配置
  20. 目标检测的数据集制作一般流程(Pascal VOC标准格式)

热门文章

  1. 90页PPT | 金融大数据平台总体架构方案(附下载)
  2. 关于mouseover,mouseout 和 mouseenter,mouseleave
  3. 【坐标转换】——基础知识与公式
  4. MYSQL自增主键ID重置
  5. DtokAPP抖音高级复刻版
  6. docker部署nacos集群
  7. html图片加载特效(预加载和加载失败)
  8. 【pandas】星巴克门店数据集分析
  9. Markdown语法之段落与换行
  10. pve 加大local容量_许迎果 第189期 PVE虚拟平台的存储策略和分区调整