8.5. Índices funcionais

Para um índice funcional, um índice é definido sobre o resultado de uma função aplicada a uma ou mais colunas de uma única tabela. Os índices funcionais podem ser utilizados para obter acesso rápido aos dados baseado no resultado da chamada de uma função.

Por exemplo, uma forma de fazer comparações que não sejam sensíveis a letras maiúsculas e minúsculas é utilizar a função lower:

SELECT * FROM teste1 WHERE lower(col1) = 'valor';

Esta consulta pode utilizar um índice, caso algum tenha sido definido sobre o resultado da operação lower(coluna):

CREATE INDEX idx_teste1_lower_col1 ON teste1 (lower(col1));

A função na definição do índice pode receber mais de um argumento, mas devem ser colunas da tabela, e não constantes. Os índices funcionais são sempre de uma coluna (ou seja, o resultado da função), mesmo que a função utilize mais de um parâmetro de entrada; não pode haver índice de várias colunas contendo chamada de função.

Dica: As restrições mencionadas no parágrafo anterior podem ser facilmente contornadas, definindo uma função personalizada utilizando a definição do índice para obter o resultado desejado internamente.