我有一个大的Oracle表与索引DATE_TIME场:“DISCONNECT_DATE”如何使用Oracle索引字段的查询
当我使用下面的where子句我的查询运行速度快:
DISCONNECT_DATE > TO_DATE('01-DEC-2016', 'DD-MON-YYYY') AND
DISCONNECT_DATE < TO_DATE('01-JAN-2017', 'DD-MON-YYYY')
当我用下面的where子句我的查询运行(很)缓缓道:
extract(month from disconnect_date) = '12' and
extract(year from disconnect_date) = '2016'
他们都或多或少相当于他们的意图。为什么前者工作,后者不工作? (我不认为我在SQL SERVER这个问题)
(我用的PL SQL Developer来编写查询)
我猜Oracle无法自动将您的第二个选项转换为第一个选项,因此它会进行全面扫描。这需要一个特殊情况来进行优化。 PS。除非你改变> => = –
我很困惑。你是说在SQL Server中这两个版本运行速度非常快吗?我对SQL Server一无所知,但我会觉得非常惊讶。 (除非你已经在SQL Server中有基于函数的索引,就像Gordon在答案中所展示的那样)。 – mathguy