我们有一个名为PROTOKOLL的表,其定义如下:
PROTOKOLL TableDefinition 该表有1000万条记录。
SELECT *
FROM (SELECT /*+ FIRST_ROWS */ a.*, ROWNUM rnum
FROM (SELECT t0.*, t1.*
FROM PROTOKOLL t0
, PROTOKOLL t1
WHERE (
(
(t0.BENUTZER_ID = 'A07BU0006')
AND (t0.TYP = 'E')
) AND
(
(t1.UUID = t0.ANDERES_PROTOKOLL_UUID)
AND
(t1.TYP = 'A')
)
)
ORDER BY t0.ZEITPUNKT DESC
) a
WHERE ROWNUM <= 4999) WHERE rnum > 0;
所以实际上我们通过ANDERES_PROTOKOLL_UUID字段自己加入表,我们应用简单的过滤。结果按创建时间排序,结果记录集的数量限制为5000。
查询的耗用时间约为10分钟! ---这是不可接受的☹
我已经有了执行计划和统计信息,并试图弄清楚如何加快查询速度,请参阅。找到他们的附件。
我的第一个认识是,优化程序将“&#34; P&#34;。&#34; ANDERES_PROTOKOLL_UUID&#34;除了where子句之外,IS NOT NULL“条件,但我不知道为什么。这是个问题吗?
或者查询的瓶颈在哪里?
我怎样才能避免......。欢迎提出任何建议。