gpt4 book ai didi

oracle - 强制 Oracle 最后执行不同的操作

转载 作者:行者123 更新时间:2023-12-04 04:43:37 25 4
gpt4 key购买 nike

我有一个非常复杂的 View (使用跨多个数据库链接的多个 View 层)需要一秒钟才能返回所有行。但是,当我要求不同的行时,它需要更多的时间。 4分钟后我停止等待。

为了让我自己尽可能清楚:

select a, b from compicated_view; -- takes 1 sec (returns 6 rows)
select distinct a, b from compicated_view; -- takes at least 4 minutes

我觉得这很奇怪,但是嘿,事情就是这样。我猜 Oracle 在规划该查询时搞砸了一些事情。现在,有没有办法强制 Oracle 首先完成 select 而不使用 distinct,然后对结果执行“select distinct *”?我查看了优化器提示,但找不到任何有关提示应用 distinct 的顺序的信息(这是我第一次优化查询,显然是 :-/)。

我在 Oracle 10g EE 上使用 Oracle SQl Developer。

最佳答案

尝试:

SELECT DISTINCT A,B FROM (
SELECT A,B FROM COMPLICATED_VIEW
WHERE rownum > 0 );

这会强制具体化子查询并防止 View 合并/谓词推送,并且可能会更改 View 的原始计划。
您也可以尝试 NO_MERGE 提示:
SELECT /*+ NO_MERGE(alias) */ 
DISTINCT a,b
FROM (
SELECT a,b FROM COMPLICATED_VIEW
) alias

关于oracle - 强制 Oracle 最后执行不同的操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18533526/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com