我有一個大的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