【发布时间】:2013-09-16 22:55:15
【问题描述】:
我正在运行 Oracle 10g。下面的查询需要大约 25 分钟才能运行。
我查看了执行计划,据我所知,大约 80% 的成本是DISTINCT COUNT。
SELECT STG.dts_start_dt_wid,
ML.sales_org_wid,
ML.cost_center_wid,
ML.chnl_type_wid,
ML.x_generic_lead_source_wid,
ML.x_specific_lead_source_wid,
ML.x_order_category_wid,
Count(DISTINCT ML.row_wid) AS TOTAL_ACTIVE_LICENSES
FROM wc_lsp_master_license_d ML,
wc_reflex_daily_activity_a_stg STG
WHERE ML.license_class = 'REFLEX'
AND STG.dts_start_dt_wid BETWEEN ML.extensions_start_dt_wid AND
ML.extensions_end_dt_wid
AND ML.license_name NOT LIKE '%demo@rosettastone.com'
GROUP BY STG.dts_start_dt_wid,
ML.sales_org_wid,
ML.cost_center_wid,
ML.chnl_type_wid,
ML.x_generic_lead_source_wid,
ML.x_specific_lead_source_wid,
ML.x_order_category_wid;
不幸的是,我需要计算不同的 row_wids。所以我想弄清楚是否有什么办法可以让第一个查询运行得更快。
这是执行计划的截图:
任何关于此的帮助或反馈都会很棒。
谢谢!
【问题讨论】:
-
。 .表之间真的没有引用许可证之类的连接条件吗?
-
1.运行
alter session set statistics_level = all;2. 在同一会话中运行您的查询 3. 查询完成后运行SELECT t.* FROM v$sql s, table(DBMS_XPLAN.DISPLAY_CURSOR(s.sql_id, s.child_number, 'ALLSTATS LAST')) t WHERE upper(sql_text) LIKE upper('%Count(DISTINCT ML.row_wid) AS TOTAL_ACTIVE_LICENSES%');并在此处发布输出 -
戈登林诺夫,谢谢你的回复。
-
能否请您发布您的表创建语句和键? @Sbejavada
标签: sql oracle oracle10g query-optimization distinct