【问题标题】:SQL query optimization OracleSQL查询优化Oracle
【发布时间】:2018-07-16 08:11:43
【问题描述】:

我有这个 SQL 查询,它首先从一个相对较短的表中选择一个数字,然后用于另一个选择,这次是从一个非常大的表中,某些信息使用第一个表中的代码。仅一个选择需要 30 多分钟,我需要优化,因为我必须运行 300 个像这样但具有不同 SWNAME 的选择。我会很感激你能给我的任何提示和技巧。谢谢 !

SELECT SWOBJECTID 
FROM   MBR_INST_PRODUCTS 
WHERE  SWPRODRELEASEID IN 
       (SELECT SWPRODRELEASEID 
        FROM   ORO_PPY_OPTIONS 
        WHERE  SWNAME LIKE 'Nov Flexibil Offer:Net Unlimited for 1MON')
AND rownum <2;

【问题讨论】:

  • 为什么是like 而不是SWNAME = 'Nov Flexibil Offer:Net Unlimited for 1MON'
  • SWNAME like 'Nov Flexibil Offer:Net Unlimited for 1MON'SWNAME = 'Nov Flexibil Offer:Net Unlimited for 1MON' 完全一样
  • Over 300 of these queries in a run - 您能否编辑您的问题以添加有关运行内容的更多详细信息?例如,您可能不需要 300 个查询(也许单个查询就可以完成工作),因此调整每个单独的查询可能不是正确的方法。另外,“非常多的时间”是什么意思?两个表上都有哪些索引?执行计划是什么?请更新您的问题以添加这些额外的详细信息,以帮助我们更好地为您提供帮助。
  • 我编辑了问题并放置了索引和其余部分。

标签: sql database oracle optimization query-optimization


【解决方案1】:

简单的连接怎么样?

SELECT m.swobjectid
  FROM mbr_inst_products m
       JOIN oro_ppy_options o ON o.swprodreleaseid = m.swprodreleaseid
 WHERE     o.swname = 'Nov Flexibil Offer:Net Unlimited for 1MON'
       AND ROWNUM < 2;

确保swprodreleaseid 列已编入索引。

【讨论】:

    【解决方案2】:

    我会把这个查询写成:

    SELECT ip.SWOBJECTID 
    FROM  MBR_INST_PRODUCTS ip JOIN
          ORO_PPY_OPTIONS po
          ON po.SWPRODRELEASEID = ip.SWPRODRELEASEID
    WHERE po.SWNAME = 'Nov Flexibil Offer:Net Unlimited for 1MON') AND
          rownum = 1;
    

    对于此查询,您需要ORO_PPY_OPTIONS(SWNAME, SWPRODRELEASEID)MBR_INST_PRODUCTS(MBR_INST_PRODUCTS) 上的索引。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-26
      • 2011-01-30
      • 1970-01-01
      相关资源
      最近更新 更多