一条sql语句手动执行时速度一般,而且使用绑定变量后效率更低
查看实时执行计划
SELECT * FROM table (DBMS_XPLAN.DISPLAY_CURSOR('07rdcx5z95a62', NULL, 'TYPICAL LAST'));
发现计划中没有走索引
TABLE ACCESS FULL
手动执行时至少还走了个索引t_IDX1
强制使用索引t_IDX1
SELECT * FROM ( SELECT a.*, rownum r FROM ( SELECT /*+ index ( tt_IDX1 )*/ sss FROM t WHERE t_id = :t_id ORDER BY
add_time DESC ) a WHERE rownum <= :limit_to ) b WHERE r > :limit_from
强制后和手动时的执行计划一致,估计是加了rownum的原因,效率还是不理想,特根据order by新增索引t_IDX2(t_id,add_time)
按说索引都是排好序的,所以手动执行时效率大幅提升,但是使用绑定变量时还是不行,还是重新去排序了
SORT ORDER BY STOPKEY
为避免改状况发生,使用了/*+ index_desc ( tt_IDX2 )*/,强制索引上排好序
再看实时的执行计划和执行时间,就ok了
SQL执行效率优化
本文针对SQL执行效率低下问题,通过分析执行计划、强制使用索引等手段进行优化。特别是对于绑定变量导致的效率下降,通过调整索引和使用提示解决。
1343

被折叠的 条评论
为什么被折叠?



