

























这是一个创建于 1523 天前的主题,其中的信息可能已经有所发展或是发生改变。
无法理解为啥会这样: v_example 为一个复杂的视图
select * from v_example where month = "202203" -- 10 多秒出结果
select * from v_example where month = to_char(add_month(trunc ( sysdate ),-1 ),“yyyyMM”) -- 就一直不会出结果 这两者在执行计划上有什么不同么
1 aptupdate 2022 年 4 月 14 日 via iPhone应该是 add_month 导致的,可以试试把 where 条件拿出来。 |
2 sorcerer 2022 年 4 月 14 日 via iPhone@aptupdate 请问 那个 month 字段如果本身就没有 index add_months 函数在这里有啥影响,另外拿出来是指? |
3 wd 2022 年 4 月 14 日 via iPhone这个你为啥不直接看看执行计划? |
4 v2eb 2022 年 4 月 14 日 via Android视图是虚拟表,在引用时动态生成数据。 |
5 aptupdate 2022 年 4 月 14 日@sorcerer 影响可以对比两种执行计划有什么差异。拿出来是指把`to_char(add_month(trunc ( sysdate ),-1 ),“yyyyMM”)`放到一个参数里,转换成第一个 select 语句这种形式。 |
6 panpanpan 2022 年 4 月 14 日建议发 sql 的同时把 explain 执行计划也发出来 |
7 leonhao 2022 年 4 月 14 日本人多年数据工程师,楼上说的没啥意义,执行计划肯定是不一样的。这种情况要么改视图定义,要不在包一层 sp ,先把时间算出来再执行动态 SQL ,当然在应用层做也可以。 |
8 sun1991 2022 年 4 月 14 日你多加的条件把 Oracle 搞糊涂了. |
9 ikesnowy 2022 年 4 月 14 日你右边是个函数调用,不是固定值,数据库在比较每一行的时候都会调用一下它获取最新的时间,So... |
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。