Não consigo descobrir por que o seguinte não está funcionando como eu esperava:
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
Eu esperaria que um novo índice fosse usado para tais consultas, mas não é mesmo se eu tentar forçá-lo com uma INDEX
dica ... Alguém poderia esclarecer por que funciona dessa maneira (estou usando o Oracle 10, se isso importa)?
obrigada
Você pode ver logicamente que o índice restringiria o escopo da contagem, mas o banco de dados não pode fazer a mesma determinação. Para usar um índice baseado em função, você precisa usar a própria função em sua consulta. Supondo que os dados sejam tais que o índice seja útil, algo assim deve fazer com que ele seja usado: