【发布时间】:2016-12-20 21:02:00
【问题描述】:
我们在物理类型 UTC 日期时间 的 列 上有索引,并且在其中一个代码中,我们在 where 子句下使用了该列,如下所示:
where
TO_DATE(TO_CHAR(**<column>**,'MM-DD-YY HH24:MI:SS'),'MM-DD-YY HH24:MI:SS') > TO_DATE(TO_CHAR(RUN_DATE,'MM-DD-YY HH24:MI:SS'),'MM-DD-YY HH24:MI:SS')
我们的 DBA 标记了 TO_CHAR 的这种用法,将确保永远不会使用该索引。
能否请您帮助我理解这是否正确/错误以及背后的原因。非常感谢。
【问题讨论】:
-
您为什么首先执行日期到字符串的回溯到日期转换?
to_date(to_char(x))。这似乎不是多余的吗?我看到您的where子句中引用了 2 列。它们是同一类型吗?他们都被索引了吗?您希望优化器使用哪个索引(如果没有完整查询则不清楚)。最后,您的 2 列的实际 Oracle 数据类型是什么?我不知道你说的UTC Date Time是什么意思。 -
这也是我想出来的。两者都是相同的数据类型,所以没有理由做 TO_DATE(TO_CHAR),但我在很多地方都看到过。我想知道这是否有可能的原因。
标签: database oracle datetime indexing to-char