<海量数据库解决方案>2011040101
【摘抄】
创建索引的目的是快速从整体集合中选择性读取满足条件的一部分集合。
查询条件中有缩减查询范围起主要作用的驱动查询条件,也有单纯起检验作用的过滤查询条件。
最理想的方法就是把拥有最小查询范围的条件作为驱动查询条件来使用。
对于特定的读取类型,最有效的索引就是基于常量比较的列来创建的组合索引。
问题的核心不在于创建了多少索引,而是创建的索引是否能够充分的发挥最大的作用。判断其作用的依据会随着其缩减查询范围的有效程度而不同,离散度就是对该判断有着直接影响的重要因素。
Somebooks多次提及:离散度在不超过全表的10%-15%的前提下索引才可以显示其具有的价值。换言之,索引列的离散度为10%-15%的深层意思是,当离散度超过该值的情况下全表扫描可能反倒比索引扫描更有效。
损益分界点是在利用索引读取满足条件的全部数据的情况下所使用的准则,即,在读取满足条件的行时索引扫描和全表扫描的损益。
如何查看索引列的离散度??
现在还是没有找到可观察的手段
细想一下,在一定量的数据上,才能有此更大的比较~
实在不行,可以这么测试:
建两个库,一个完全无索引;一个根据实际设定索引内容
执行相同的sql来比较,来归纳离散度在此的应用
当然,在小数据上这个是完全看不到效果,大数据又是好大,这个需要实践来得出。
希望后续的阅读能解决今天的问题。
创建索引的目的是快速从整体集合中选择性读取满足条件的一部分集合。
查询条件中有缩减查询范围起主要作用的驱动查询条件,也有单纯起检验作用的过滤查询条件。
最理想的方法就是把拥有最小查询范围的条件作为驱动查询条件来使用。
对于特定的读取类型,最有效的索引就是基于常量比较的列来创建的组合索引。
问题的核心不在于创建了多少索引,而是创建的索引是否能够充分的发挥最大的作用。判断其作用的依据会随着其缩减查询范围的有效程度而不同,离散度就是对该判断有着直接影响的重要因素。
Somebooks多次提及:离散度在不超过全表的10%-15%的前提下索引才可以显示其具有的价值。换言之,索引列的离散度为10%-15%的深层意思是,当离散度超过该值的情况下全表扫描可能反倒比索引扫描更有效。
损益分界点是在利用索引读取满足条件的全部数据的情况下所使用的准则,即,在读取满足条件的行时索引扫描和全表扫描的损益。
如何查看索引列的离散度??
现在还是没有找到可观察的手段
细想一下,在一定量的数据上,才能有此更大的比较~
实在不行,可以这么测试:
建两个库,一个完全无索引;一个根据实际设定索引内容
执行相同的sql来比较,来归纳离散度在此的应用
当然,在小数据上这个是完全看不到效果,大数据又是好大,这个需要实践来得出。
希望后续的阅读能解决今天的问题。
无论生活、还是技术,一切都不断的学习和更新~~~努力~