一个SQL中where条件有两个字段,有个字段用了in,而in后面元素数量非常多,接近100个。请问优化器是怎么判断是否使用这个字段的索引哪?是要对这100个元素都要判断他的柱状图吗?还是只判断前10个或者多少个哪?
1 个赞
-
是否用索引可以看explan extended计划
-
只要有建索引是会创建相应的索引路径,至于是否使用索引计划看代价
-
10个的限制是存储层估行,与是否走索引无关
1 个赞
就是想要知道OB优化器估行、估算成本的时候,对in里面的值取多少个来估算。不会把in里面的值都拿来估算吧。
1 个赞
目前in在计算代价的时候的确是将in中的值一个个取出来估行
可是我现在遇到的一个问题就是,in里有大概60个的样子。去掉前面20个值,只保留后面40个。就能走正确的索引。
可以对比一下去掉20个值前后的估行,估行不同,会影响执行计划访问路径的选择。如果估行不准确,可能和统计信息的准确性以及直方图的类型有关。
就是估行不同