【问题标题】:How to reduce execution time of the sql query? [closed]如何减少sql查询的执行时间? [关闭]
【发布时间】:2012-08-30 10:20:46
【问题描述】:
SELECT T1.DESCRIPTION,
   T1.NAME,
   T1.EXTERNALKEY,
   T2.STATECODE
  FROM TABLE1 T1, TABLE2 T2, TABLE3 T3
WHERE     T1.CLASSID = 7040
   AND T2.ID = T3.ID
   AND T2.RECEIVERID = T1.ID
   AND T1.OWNERID = (SELECT ID
                      FROM TABLE1
                     WHERE EXTERNALKEY = 'XXX')
MINUS
SELECT T1.DESCRIPTION,
   T1.NAME,
   T1.EXTERNALKEY,
   T2.STATECODE
FROM TABLE3 T3, TABLE1 T1, TABLE2 T2
WHERE VALUE = 'XXXX' AND T3.ID = T1.ID;

嗨。这是我的执行查询,它需要很长时间。任何人都可以将其更改为优化的。谢谢你

【问题讨论】:

  • 愿意分享您的表格结构吗?另外:您的数据库中有哪些类型的索引?
  • 表 2 没有出现在查询第二部分的 where 子句中,您得到的是笛卡尔积...希望这是您的意图。
  • @Mat +1 好地方,使用正确的连接语法会更容易!
  • 阅读(并接受!)这个:Bad habits to kick : using old-style JOINs
  • 在不知道更多关于你的表的情况下,为什么这是“进展缓慢”(解释计划),以及你到底在做什么(即这个查询回答的问题是什么),有任何人都无能为力。

标签: sql oracle toad execution-time


【解决方案1】:

首先我会在表上放置适当的索引,最好是覆盖索引

【讨论】:

    【解决方案2】:
    ALTER TABLE `TABLE1 ` ADD INDEX `index1` (`NAME`, `EXTERNALKEY`);  
    
    ALTER TABLE `TABLE1 ` ADD INDEX `index2` (`OWNERID`);
    
    ALTER TABLE `TABLE2 ` ADD INDEX `index3` (`STATECODE`);
    
    ALTER TABLE `TABLE2 ` ADD INDEX `index4` (`RECEIVERID`);
    

    现在记下查询的执行时间

    【讨论】:

      【解决方案3】:

      如果没有执行计划,我们当然无法为您提供帮助,但我看到您得到了什么

      SELECT ID
      FROM TABLE1
      WHERE EXTERNALKEY = 'XXX'
      

      我建议您使用 WITH 子句将其具体化,或者使用 id%type 将 ID 放入任何 plsql 变量中,并在查询中使用它来代替您的语句。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-01-29
        • 1970-01-01
        • 2012-11-09
        • 1970-01-01
        • 1970-01-01
        • 2021-07-22
        相关资源
        最近更新 更多