我的原始查询是
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'
如果您可以同时发布EXPLAIN PLAN输出...,这将很有帮助。
如果您更改查询源代码,则预计执行计划会更改(例如,当您更改应用程序的源代码时,相应的已编译代码也会更改)。
要理解为什么Oracle基于成本的优化器(CBO)会生成给定的估计执行计划,您需要生成a optimizer trace并能够对其进行解释(但很难,因为Oracle尚未正式记录该文件。