我在下面创建了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
)