在 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
)
我在 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
)