【发布时间】:2019-10-12 18:35:38
【问题描述】:
我的选择查询运行了 15 个小时,并且仍在运行,所以我取消了它。如何优化我的查询?
CREATE TABLE W_PURCH_RCPT_FS_tmp
AS
SELECT RCV.TRANSACTION_ID,
PO.RELEASE_DATE,
NVL (ASL.PROCESSING_LEAD_TIME, MTL.FULL_LEAD_TIME)
AS PROCESSING_LEAD_TIME
FROM obia_ui.PO_ASL_ATTRIBUTES@betsy.world@dsn_310 ASL,
obia_ui.MTL_SYSTEM_ITEMS_B@betsy.world@dsn_310 MTL,
obia_ui.RCV_TRANSACTIONS@betsy.world@dsn_310 RCV,
obia_ui.PO_RELEASES_ALL@betsy.world@dsn_310 PO,
obia_ui.PO_LINES_ALL@betsy.world@dsn_310 LINES,
obia_ui.PO_LINE_LOCATIONS_ALL@betsy.world@dsn_310 LOC,
obia_ui.PO_HEADERS_ALL@betsy.world@dsn_310 HEAD
WHERE RCV.CREATION_DATE > '30-JUN-2016'
AND MTL.INVENTORY_ITEM_ID = LINES.ITEM_ID
AND MTL.ORGANIZATION_ID = LOC.SHIP_TO_ORGANIZATION_ID
AND LINES.PO_LINE_ID = LOC.PO_LINE_ID
AND ASL.USING_ORGANIZATION_ID = LOC.SHIP_TO_ORGANIZATION_ID
AND ASL.ITEM_ID = LINES.ITEM_ID
AND ASL.VENDOR_ID = HEAD.VENDOR_ID
AND ASL.VENDOR_SITE_ID = HEAD.VENDOR_SITE_ID
AND RCV.TRANSACTION_ID = PO.PO_RELEASE_ID
;
我希望该查询能够更短地完成。
【问题讨论】:
-
使用现代连接而不是旧的交叉连接方法
-
@Richie 调优问题在 Stack Overflow 上很困难,因为调优需要大量信息,并且需要大量反复。为了收集更多信息,我建议找到具有实际统计信息的执行计划。为此,请在一个会话中运行该语句,在
GV$SQL中找到SQL_ID,并使用类似select sql_id, sql_fulltext from gv$sql where lower(sql_fulltext) like '%@betsy.world@dsn_310%'的语句。然后使用如下语句生成 SQL 监控报告:select dbms_sqltune.report_sql_monitor(sql_id => 'SQL_ID from above') from dual;。使用结果编辑问题。
标签: sql oracle optimization