Oracle-10g
查詢中不使用基於 Oracle 函式的索引
我無法弄清楚為什麼以下內容無法按預期工作:
CREATE TABLE table1(table1_id INT NOT NULL PRIMARY KEY, col1 INT NOT NULL, val1 VARCHAR(50)); CREATE INDEX IDX_table1_fnct ON table1(CASE WHEN col1 = 3 THEN val1 ELSE NULL END); SELECT COUNT(val1) WHERE col1 = 3 ; shows full scan
我希望新索引可用於此類查詢,但即使我嘗試用
INDEX
提示強制它也不是……誰能澄清它為什麼會這樣工作(如果這很重要,我正在使用 Oracle 10)?謝謝
從邏輯上可以看出,索引會縮小計數的範圍,但數據庫無法做出同樣的決定。要使用基於函式的索引,您需要在查詢中使用函式本身。假設數據是這樣的索引將是有用的,這樣的事情應該會導致它被使用:
SELECT COUNT(val1) WHERE CASE WHEN col1 = 3 THEN val1 ELSE NULL END IS NOT NULL;