sql - ¿Cómo reacciona DB2 sin el índice funcional?
performance indexing (2)
Tengo una mesa como
Tabla 1:
col1
col2
col3
y tiene un índice sobre col3. Si selecciono los datos de la tabla con la siguiente consulta.
SELECT * FROM Table1 WHERE LCASE(col3) =''abcde''
¿El índice ayuda sobre el rendimiento?
Respuesta corta: No.
Respuesta larga: No.
Imagine los siguientes contenidos en su col3:
Foo
bar
baz
foo
BAR
El índice en col3 sabría este orden:
BAR
Foo
bar
baz
foo
Sin embargo, el orden de la consulta lcase (col3) sería
bar
BAR
baz
foo
Foo
completamente diferente del índice, por lo que el índice es de uso limitado.
Sin embargo, puede agregar un campo creado automáticamente con la minúscula a su tabla:
ALTER TABLE Table1
ADD COLUMN col3_lcase VARCHAR(?)
GENERATED ALWAYS AS ( LCASE(col3) );
CREATE INDEX col3_lcase_idx ON Table1 ( col3_lcase );
el seleccionar arriba usaría el índice col3_lcase_idx
.
Ahora, Db2 finalmente es compatible con los índices basados en expresiones Índice basado en función AKA, disponible en DB2 10.5+
Ahora puedes crear un índice como
CREATE INDEX col3_lcase_idx on Table1 ( LCASE(col3) )
RUNSTATS ON TABLE Table1 AND INDEXES ALL