在 Oracle View 中使用 Union All 性能下降

Using Union All performance degrades in Oracle View

我在 oracle 视图下创建了我在联合中添加了 select 查询,所有这些都按预期结果正常工作,但突然视图的性能变得非常慢。 table IS_ID 包含 510000 条记录。

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

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
)