在Oracle视图中使用Union All会降低性能



我在下面创建了oracle视图,在其中我在联合中添加了select查询,所有这些都能很好地工作,达到预期的结果,但视图的性能突然变得很慢。表IS_ID包含510000条记录。

我真的不明白,添加这个UNION ALL选择查询只在视图中增加了400行,但为什么现在性能变得非常慢。性能缓慢的主要原因是union all中的以下语句阻塞了视图。我可以将IS_TRE视图的union all或下面的语句分配到不同的视图中以提高性能吗?或者我如何重写下面的语句以提高性能?

WHERE
FUND_ISIN NOT IN
(
SELECT DISTINCT
FUND_ISIN
FROM
IS_ID
WHERE
MEMBER_DESCR ='O')

我给了你一些评论,告诉你为什么还有这么多事情要分享。但这里有一个免费的蜜蜂,一般来说

SELECT 
FUND_ISIN,    
MAX(FUND_QUOTE_CRNY),    
'O' AS MEMBER_DESCR,
100 - SUM(MEMBER_RATIO),
'Other total'
FROM
IS_ID 
WHERE
FUND_ISIN NOT IN
(
SELECT DISTINCT
FUND_ISIN
FROM
IS_ID
WHERE
MEMBER_DESCR ='O')
GROUP BY
FUND_ISIN;

可以重写为

SELECT 
FUND_ISIN,    
MAX(FUND_QUOTE_CRNY),    
'O' AS MEMBER_DESCR,
100 - SUM(MEMBER_RATIO),
'Other total'
FROM
IS_ID
GROUP BY
FUND_ISIN
HAVING sum(case when MEMBER_DESCR ='O' then 1 else 0 end) = 0

而且它可能会表现得更好。

这是否会对你的实际情况产生影响还不得而知。

您可以尝试NOT EXISTS,看看这是否有助于

FROM
IS_ID OUT_Q
WHERE
FUND_ISIN NOT EXISTS
(
SELECT 'X' FROM IS_ID IN_Q
WHERE MEMBER_IN_Q.DESCR ='O'  AND OUT_Q.COLUMNS_MAKING_UP_THE_UNIQE_KEY
= IN_Q.COLUMNS_MAKING_UP_THE_UNIQE_KEY
)

最新更新