@yanbo-ai
2016-08-08T20:08:36.000000Z
字数 1024
阅读 3052
Dynamic
Index
SQL
DB
Author: Andy Ai
动态索引创建器是指:根据收集到的用户过滤器(查询条件),分析已有的数据分布情况,找到一条最佳索引路径,然后创建最佳索引;同时,回收已经过时的索引(不再是最佳路径的索引)。
常规索引的创建是根据查询语句的过滤器(查询条件)由人主观地判断该如何建立一个最合理的索引,它受限于指定的过滤器(查询条件)与人的技术水平。不合理地创建索引反而会影响性能。
动态索引的创建同样需要根据过滤器,但它更注重于对库中已有数据的分布情况进行分析,然后找到一个最合理的索引路径。
通过下面的方式,可以可以确定数据行的大小:
知道数据行(数据容量)的大小还不够,数据的分布情况才是影响索引效率的关键点。
根据索引树的结构,我们可以得出结论:数据分布越广,索引发挥的性能越明显。
例如:我们在一批同一型号的车辆中找到某一辆相当费力,如果在停车场要确认是否有一辆法拉利那就容易多了。型号越多,要找到某一辆车就越快(有索引的情况下)。
数据分布是否广泛的确定方式:
select count(distinct type) as counter from cars group by type
counter 值越大,代表type在的分布越分散。对于索引树来说,这是一大好事!
分布越分散的,排列得越靠前。
例如:typeCount > nameCount
创建的索引应该是:
create index type_name_idx on cars (type,name)
动态的查询语句最大的麻烦是:你不能确定用户在何时会使用哪种过滤器组合过滤结果。 如果有2个查询条件,那么它的查询组合方式就有3种。当组合数量达到一定的规模下,使用常规的索引创建方式很有可能出现漏网之鱼。
需要动态地了解数据的分布情况,需要对数据不断的计算分析,这样会带来性能的消耗,可能会影响到正常的使用。