未指定结束日期时,Oracle解释计划已更改

问题描述 投票:0回答:1

我的原始查询是

SELECT A.ID, A.NM, LISTAGG(A.ITEM) WITHIN GROUP (ORDER BY A.ITEM), B.ADDR
FROM   A,B
WHERE 1=1
AND   A.ID = B.ID
AND   A.DATE >= TO_DATE('20190701','YYYYMMDD')
AND   A.ID >= '20190701000'
AND   A.ID <= '20200301FFF'

GROUP BY A.ID, A.NM, B.ADDR

及以上查询花费了很长时间,但没有结果。

所以我添加了'AND A.DATE

SELECT A.ID, A.NM, LISTAGG(A.ITEM) WITHIN GROUP (ORDER BY A.ITEM), B.ADDR
FROM A,B
WHERE 1=1
AND A.ID = B.ID
AND A.DATE >= TO_DATE('20190701','YYYYMMDD')
AND A.DATE < TO_DATE('20200301','YYYYMMDD')
AND A.ID >= '20190701000'
AND A.ID <= '20200301FFF'

并且,解释计划是不同的。我想指定结束日期做出解释计划更改,但我不知道为什么。为什么会这样?

sql oracle sql-execution-plan
1个回答
0
投票

如果您可以同时发布EXPLAIN PLAN输出...,这将很有帮助。

如果您更改查询源代码,则预计执行计划会更改(例如,当您更改应用程序的源代码时,相应的已编译代码也会更改)。

要理解为什么Oracle基于成本的优化器(CBO)会生成给定的估计执行计划,您需要生成a optimizer trace并能够对其进行解释(但很难,因为Oracle尚未正式记录该文件。

© www.soinside.com 2019 - 2024. All rights reserved.