需要帮助来优化 ORACLE SQL 查询 [关闭]
Posted
技术标签:
【中文标题】需要帮助来优化 ORACLE SQL 查询 [关闭]【英文标题】:need a help to optimize ORACLE SQL query [closed] 【发布时间】:2019-08-13 13:01:28 【问题描述】:有人可以帮我优化以下查询吗?
此查询从 JOINS 中描述的许多表中获取记录,由于以下联接,它花费了太多时间:
如下所示,我花费了太多时间来执行这两个连接。 有什么方法可以让我更好地实施吗?
SELECT......... .....
LEFT OUTER JOIN .....
LEFT OUTER JOIN
(
SELECT DISTINCT A,B,C
from ABC
where (A,B,C ) not in
(
select A,B,C from
(
SELECT A,B,C,count(*)
FROM ABC
group by A,B,C
having count(*) >1
)
)
) temp1 ON condition1
LEFT OUTER JOIN
(
SELECT DISTINCT X,Y,Z from XYZ
where (X,Y,Z ) not in
(
select X,Y,Z from
(
SELECT X,Y,Z ,count(*)
FROM XYZ
group by X,Y,Z
having count(*) >1
)
)
) temp2 ON condition2 .... ... LEFT OUTER JOIN ....... Where
一些条件
如果我删除上面显示的两个连接,查询会顺利进行。
【问题讨论】:
不需要distinct
,因为之前的count
消除了重复项。您可以将这些子查询更改为analytic versions。
【参考方案1】:
如果您确定上述代码块会对性能产生影响,那么您可以使用以下代码。我已经用我的版本替换了你的内部查询。 -- 见内联 cmets。
SELECT......... .....
LEFT OUTER JOIN .....
LEFT OUTER JOIN
-- (
-- SELECT DISTINCT A,B,C
-- from ABC
-- where (A,B,C ) not in
-- (
-- select A,B,C from
-- (
-- SELECT A,B,C,count(*)
-- FROM ABC
-- group by A,B,C
-- having count(*) >1
-- )
-- )
-- )
--
-- commented above inner query and
--
-- added following inner query
--
(SELECT A,B,C
FROM ABC
group by A,B,C
having count(*) = 1)
--
--
temp1 ON condition1
LEFT OUTER JOIN
-- (
-- SELECT DISTINCT X,Y,Z from XYZ
-- where (X,Y,Z ) not in
-- (
-- select X,Y,Z from
-- (
-- SELECT X,Y,Z ,count(*)
-- FROM XYZ
-- group by X,Y,Z
-- having count(*) >1
-- )
-- )
-- )
--
-- commented above inner query and
--
-- added following inner query
--
(SELECT X,Y,Z
FROM XYZ
group by X,Y,Z
having count(*) = 1 )
--
--
temp2 ON condition2 .... ... LEFT OUTER JOIN ....... Where
干杯!!
【讨论】:
我已经用一个更简单的版本解决了 OP 的冗长查询,这将节省执行时间 -- @Rob 这里的问题是题外话,不应该回答。并非所有问题都应回答:***.com/help/how-to-answer 该问题现已关闭,将与您的回答一起被删除。 是的,我能理解。以上是关于需要帮助来优化 ORACLE SQL 查询 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
关于优化在大量数据上执行的 Oracle SQL 查询的建议/技巧