oracle order by 导致查询慢的问题记录贴
问题描述:一条没有查询条件的SQL,就是有个order by导致查询的速度特慢。去掉order by之后很快。
有order by
SQL解释计划结果
没有order by
SQL解释计划结果
那么怎么让有order by 的排序SQL执行也那么快呢?网上找了好多资料,基本确定思路,就是索引。可是通常情况在排序字段上创建索引也没有起到效果,SQL分析工具也是没有使用索引,大量的耗时在排序上。
对于这个SQL分析了下,使用的是日期排序,然后试着在where条件中添加日期,发现居然引用了索引了。然后取了个巧,投了个机,在没有条件的时候添加一个默认日期段,使得查询速度直接起飞。
SQL分析发现并没有提升太多,15万比20万,感觉没有提升一样。但是SQL解释计划中没有排序,明明在SQL中写了order by 解释计划中居然不用排序了,这可是省了好多耗费呢(20万)。
可是实际执行速度却不一样,不到1秒
总结一下,生活总是需要惊喜。排序字段创建索引,并且在where条件中使用该字段作为查询条件,排序的查询速度大大提升。
补充一个有趣的现象:当where中存在查询条件,而没有order by的字段时,不强制在where条件中添加一个order by字段的查询条件,将固定查询条件的字段和order by 的排序字段组成一个组合索引,SQL解释计划也会使用到该索引,速度也是起飞。