查询优化 [Oracle]

     2023-05-09     241

关键词:

【中文标题】查询优化 [Oracle]【英文标题】:Query optimization [Oracle] 【发布时间】:2018-12-05 14:56:31 【问题描述】:

如何优化此查询的性能?

SELECT Count(DISTINCT DT.id) 
FROM   pcwdeptrans DT 
       INNER JOIN pcwitemtotal IT 
               ON DT.id = IT.deposittransid 
       LEFT OUTER JOIN pcwdepreceipt DR 
                    ON DR.deposittransid = DT.id 
WHERE  (( ( DT.statecode IN ( :1, :2, :3, :4, 
                              :5, :6, :7, :8 ) 
             OR ( DT.statecode IN ( :9 ) 
                  AND IT.statecode = :10 ) ) 
          AND DR.requesttime >= :11 
          AND DR.requesttime <= :12 
          AND DR.userid = :13 )) 

如果您认为语法不正确,请帮助我正确的语法。

但这是一个应用程序查询,从 AWR 报告中识别为性能分析的一部分

摘自 AWR:

Top SQL with TOP Events

来自测试数据库的执行计划(产品会有所不同):

Execution plan of the query

【问题讨论】:

您的WHERE 子句正在将外连接变成内连接——如果我没看错括号的话。 我同意戈登的观点。在开始调整之前,您应该确保您的查询功能正确 【参考方案1】:

与 Where 一起加入可能会很慢。以下可能会更快(但不一样...请参阅 cmets 并重新考虑是否需要内部或外部联接...)

SELECT Count(DISTINCT DT.id) 
FROM pcwdeptrans DT 
  INNER JOIN pcwitemtotal IT 
      ON DT.id = IT.deposittransid 
     AND ( DT.statecode IN ( :1, :2, :3, :4, :5, :6, :7, :8 ) 
       OR ( DT.statecode IN ( :9 ) AND IT.statecode = :10 ) )
  LEFT OUTER JOIN pcwdepreceipt DR 
      ON DR.deposittransid = DT.id 
     AND DR.requesttime >= :11 
     AND DR.requesttime <= :12 
     AND DR.userid = :13

编辑: 之前在问题的 cmets 中已经开始讨论是内连接还是外连接。使用 where 子句将问题的外连接转换为内连接可能是也可能不是有意的。

SELECT Count(DISTINCT DT.id) 
FROM pcwdeptrans DT 
  INNER JOIN pcwitemtotal IT 
      ON DT.id = IT.deposittransid 
     AND ( DT.statecode IN ( :1, :2, :3, :4, :5, :6, :7, :8 ) 
       OR ( DT.statecode IN ( :9 ) AND IT.statecode = :10 ) )
  INNER JOIN pcwdepreceipt DR 
      ON DR.deposittransid = DT.id 
     AND DR.requesttime >= :11 
     AND DR.requesttime <= :12 
     AND DR.userid = :13

【讨论】:

这不会改变查询逻辑吗? WHERE 子句中的过滤有效地使与 pcwdepreceipt 的联接成为 INNER JOIN

Oracle - 查询优化 - 查询运行时间长

】Oracle-查询优化-查询运行时间长【英文标题】:Oracle-QueryOptimization-Queryrunsforalongtime【发布时间】:2020-06-1905:14:39【问题描述】:我有一个每月执行一次的oracle查询来处理订单详细信息。这个查询需要花费大量时间来执行。(超... 查看详情

如何针对 Oracle 优化此查询

】如何针对Oracle优化此查询【英文标题】:HowtooptimizethisqueryforOracle【发布时间】:2018-10-1314:41:59【问题描述】:我正在学习使用索引、索引簇、哈希簇等结构进行查询优化。我有一张桌子客户和预订。我需要优化2个查询查询1:... 查看详情

[Oracle]优化一个查询包含一个最大子查询

】[Oracle]优化一个查询包含一个最大子查询【英文标题】:[Oracle]Optimizationaquerycontainamaxsubquery【发布时间】:2016-01-0507:44:13【问题描述】:我想知道是否有办法根据该请求优化视图:SELECTproduct,price,quantity_in_stock,locationFROMmytableAxWH... 查看详情

Oracle:查询优化

】Oracle:查询优化【英文标题】:Oracle:queryoptimization【发布时间】:2015-10-2709:38:46【问题描述】:我有两个表tab1和tab2.tab1有108000行,tab2有1200000行。这是示例数据tab1+-----------------------------------------------------+|Low|high|Region_id|+-------... 查看详情

如何优化oracle查询?

】如何优化oracle查询?【英文标题】:Howtooptimizeoraclequery?【发布时间】:2017-06-1509:01:16【问题描述】:以下查询在oracle11g中大约需要45秒selectcount(cap.ISHIGH),ms.SID,ms.NUMfromCDetailcap,MDatamswherecap.MDataID_FK=ms.MDataID_PKandtrunc(cap.CREATEDTIME)bet 查看详情

oracle查询优化问题

】oracle查询优化问题【英文标题】:oraclequeryoptimizationissue【发布时间】:2019-10-1910:31:01【问题描述】:有没有办法优化下面的查询?SELECTRNC,CELLNAME,SUM(C310484605)ASDL_PWR_FAIL,SUM(C310484607)ASUL_PWR_FAIL,SUM(C310484609)ASHSDPA_FAIL,SUM(C310484611)ASHSU... 查看详情

如何优化 Oracle 中的删除查询(带子查询)?

】如何优化Oracle中的删除查询(带子查询)?【英文标题】:Howtooptimizedeletequery(withsubquery)inOracle?【发布时间】:2013-01-0316:59:29【问题描述】:我有这样的查询:deletefromtableAwheretableA.fkin(selectidfromtableBwheretableB.column1=\'somevalue\'andt... 查看详情

Oracle 查询性能优化

】Oracle查询性能优化【英文标题】:OracleQueryPerformanceOptimization【发布时间】:2020-06-1021:05:37【问题描述】:我目前正在优化以下查询,运行时间超过60分钟。查询中提供的日期由在执行期间计算日期的变量替换。目标是让此查询... 查看详情

此查询的 Oracle 查询优化

】此查询的Oracle查询优化【英文标题】:OracleQueryoptimizationforthisquery【发布时间】:2013-06-0613:06:21【问题描述】:请建议如何改进以下查询/索引以获得更快的结果。查询SELECTTab1.pk,Tab1.c_RetryCount,Tab1.c_TimeCreatedFROMTable1Tab1WHERE((Tab1.c_... 查看详情

oracle查询技巧与优化字符串操作(代码片段)

前言前两篇blog分别介绍了Oracle中的单表查询(Oracle查询技巧与优化(一)单表查询与排序)与多表查询(Oracle查询技巧与优化(二)多表查询)的相关技巧与优化,那么接下来本篇blog就具体研... 查看详情

Oracle 查询优化建议

】Oracle查询优化建议【英文标题】:Oraclequeryoptimizationrecommendation【发布时间】:2020-11-2112:22:36【问题描述】:下面的查询只需要很长时间,下面的谓词仅用于获取唯一记录,因此想知道是否有不同的方法来重写相同的查询,而... 查看详情

一个棘手的删除查询的 Oracle 查询优化

】一个棘手的删除查询的Oracle查询优化【英文标题】:OracleQueryOptimisationofatrickydeletequery【发布时间】:2016-01-1904:26:26【问题描述】:我们为OracleDB中的一个表(已经有20亿行)构建了一个删除查询。此查询作为PL/SQLProc的一部分执... 查看详情

Oracle 查询优化器是不是将*** where 子句应用于子查询或视图?

】Oracle查询优化器是不是将***where子句应用于子查询或视图?【英文标题】:DoesOracleQueryOptimizerapplytoplevelwhereclausestosubqueriesorviews?Oracle查询优化器是否将***where子句应用于子查询或视图?【发布时间】:2015-10-1507:46:13【问题描述... 查看详情

Oracle SQL SELECT 子查询优化

】OracleSQLSELECT子查询优化【英文标题】:OracleSQLSELECTsubqueryOptimization【发布时间】:2013-11-1815:20:57【问题描述】:我需要优化SELECT查询以提高性能。我正在使用ORACLE10g。下面是我的表:CREATETABLETRNSCTN(TRNSCTN_IDVARCHAR2(32)NOTNULL,TRNSCTN_D... 查看详情

使用减号 oracle 优化插入查询

】使用减号oracle优化插入查询【英文标题】:optimizeInsertquerywithminusoracle【发布时间】:2017-05-2715:47:39【问题描述】:想要优化需要更长时间才能完成的重要语句。这个过程基本上会:1)在NG_ORGANIZATION_CATEGORY_GTMP上插入数据5个插入... 查看详情

如何使用大量和语句优化 Oracle 查询

】如何使用大量和语句优化Oracle查询【英文标题】:HowtooptimizeOracleQuerywithlotsofandstatements【发布时间】:2019-08-1911:44:40【问题描述】:我正在使用Select查询中的多个and语句从oracle表中选择数据。另外我正在使用Like语句。问题是当... 查看详情

如何优化 SQL 查询(Oracle 数据库)

】如何优化SQL查询(Oracle数据库)【英文标题】:HowtooptimizeSQLquery(OracleDatabase)【发布时间】:2018-10-0120:36:01【问题描述】:我想优化我的SQL查询。它看起来很简单,但对我来说编译时间太长了。我的数据库是Oracle12.1.0.3。当表AB_... 查看详情

优化 Oracle 数据库查询/fetchall

】优化Oracle数据库查询/fetchall【英文标题】:OptimizingOracledatabasequery/fetchall【发布时间】:2012-10-2714:20:05【问题描述】:数据库设计远非最佳,但我必须处理它,现在我真的陷入困境。编辑:我正在使用cx_Oracle好的,这是我的查... 查看详情