SQL 同时查询最大值、最小值的优化方法

在实际工作中,我们经常需要将表中的最大值和最小值同时查询出来,用于分析。
类似于这样的SQL,select min(object_id),max(object_id) from  borpt.t1;

但是,表很大的时候,用最容易想到的方式效率很低,那么有没有更高效的方式呢?下面展开讲解。

初始化测试环境

查询最大值时的执行计划,走的是INDEX FUll SCAN,可以看到cost只有2,一致性读88,还是很高效的。

查询最小值的执行计划,和查询最大值时的执行计划完全一样。

问题来了,同时查询最大值和最小值,SQL则变得很慢,cost则高达325,比上面的2高出一百多倍,并且执行计划居然走了全表扫描(TABLE ACCESS FULL)!!

 

优化办法:
查询最大值和查询最小值分开做,都作为查询dual表的标量子查询,保持了INDEX FULL SCAN的高效。整个SQL也高效了很多很多。

 

其他:
也有人提出用这条SQL,我要说的是这种写法效率更低,因为要进行全表扫描并且排序。

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注