在分析程序的痕迹时,我在创建两个新索引之前运行了一个程序,我发现一些查询现在比以前的运行具有更高的运行时间(没有使用任何新索引我已创建并具有相同的执行计划)。
一个特定的查询是:
SELECT GP.PERIOD_YEAR, GP.PERIOD_NAME, GP.PERIOD_YEAR || '-' ||
LPAD(GP.PERIOD_NUM, 2, '0')
FROM
GL_PERIODS GP WHERE GP.PERIOD_TYPE = :B3 AND GP.PERIOD_SET_NAME = :B2 AND
GP.ADJUSTMENT_PERIOD_FLAG = 'N' AND TRUNC (:B1 ) BETWEEN TRUNC
(GP.START_DATE) AND TRUNC (GP.END_DATE)
Before Stats:
call count cpu elapsed disk query current rows
------- ------ -------- ---------- ---------- ---------- ---------- ----------
Parse 1 0.00 0.00 0 0 0 0
Execute 1738112 31.63 31.26 0 0 0 0
Fetch 1738112 778.18 780.36 17 6952448 0 1738112
------- ------ -------- ---------- ---------- ---------- ---------- ----------
total 3476225 809.81 811.63 17 6952448 0 1738112
After Stats:
call count cpu elapsed disk query current rows
------- ------ -------- ---------- ---------- ---------- ---------- ----------
Parse 1 0.00 0.00 0 0 0 0
Execute 1738112 75.80 76.87 0 0 0 0
Fetch 1738112 1490.70 1499.47 17 6952448 0 1738112
------- ------ -------- ---------- ---------- ---------- ---------- ----------
total 3476225 1566.50 1576.36 17 6952448 0 1738112
此查询的等待事件是
没有超过一秒的总等待时间。
所以我想知道的是为什么这个特定的查询在运行时显示出这种差异?我应该考虑所有领域以获得运行时差异的原因。
我在同一个实例中运行程序。如果需要更多信息,请告诉我。
答案 0 :(得分:0)
根据性能调优的oracle文档:
您可以使用索引来提高返回少于表中行的15%的查询的性能。通过完全扫描,即通过顺序读取所有行,可以更快地执行返回表中15%或更多行的查询。
因此,在您的情况下,请检查提取的行数不大于或等于15%。
您可以参考此performance tuning文档。