关键词:
【中文标题】查询优化 [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 JOINOracle - 查询优化 - 查询运行时间长
】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好的,这是我的查... 查看详情