Oracle-10g

查詢中不使用基於 Oracle 函式的索引

  • July 30, 2012

我無法弄清楚為什麼以下內容無法按預期工作:

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;

引用自:https://dba.stackexchange.com/questions/21713