加速SQL简单查询

时间:2018-01-25 14:44:07

标签: sql oracle11g query-optimization

我们有一个名为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分钟! ---这是不可接受的☹

我已经有了执行计划和统计信息,并试图弄清楚如何加快查询速度,请参阅。找到他们的附件。

ExecutionPlan Statistics

我的第一个认识是,优化程序将“&#34; P&#34;。&#34; ANDERES_PROTOKOLL_UUID&#34;除了where子句之外,IS NOT NULL“条件,但我不知道为什么。这是个问题吗?

或者查询的瓶颈在哪里?

我怎样才能避免......。欢迎提出任何建议。

0 个答案:

没有答案