我无法弄清楚为什么以下内容无法正常工作:
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)?
谢谢
从逻辑上可以看出,索引会缩小计数范围,但数据库不能做出相同的判断。要使用基于函数的索引,您需要在查询中使用该函数本身。假设数据使得索引有用,像这样的事情应该会导致它被使用: