11.3. Índices com várias colunas

Pode ser definido um índice contendo mais de uma coluna. Por exemplo, se existir uma tabela como:

CREATE TABLE teste2 (
  principal  int,
  secundario int,
  nome       varchar
);

(Digamos que seja armazenado no banco de dados o diretório /dev...) e freqüentemente sejam feitas consultas como

SELECT nome
    FROM  teste2
    WHERE principal = constante AND secundario = constante;

então é apropriado definir um índice contendo as colunas principal e secundario como, por exemplo,

CREATE INDEX idx_teste2_princ_sec ON teste2 (principal, secundario);

Atualmente, somente as implementações de B-tree e GiST suportam índices com várias colunas. Podem ser especificadas até 32 colunas (Este limite pode ser alterado durante a geração do PostgreSQL; consulte o arquivo pg_config_manual.h).

O planejador de comandos pode utilizar um índice com várias colunas, para comandos envolvendo a coluna mais à esquerda na definição do índice mais qualquer número de colunas listadas à sua direita, sem omissões. Por exemplo, um índice contendo (a, b, c) pode ser utilizado em comandos envolvendo todas as colunas a, b e c, ou em comandos envolvendo a e b, ou em comandos envolvendo apenas a, mas não em outras combinações (Em um comando envolvendo a e c, o planejador pode decidir utilizar o índice apenas para a, tratando c como uma coluna comum não indexada). Obviamente, cada coluna deve ser usada com os operadores apropriados para o tipo do índice; as cláusulas envolvendo outros operadores não são consideradas.

Os índices com várias colunas só podem ser utilizados se as cláusulas envolvendo as colunas indexadas forem ligadas por AND. Por exemplo,

SELECT nome
    FROM  teste2
    WHERE principal = constante OR secundario = constante;

não pode utilizar o índice idx_teste2_princ_sec definido acima para procurar pelas duas colunas (Entretanto, pode ser utilizado para procurar apenas a coluna principal).

Os índices com várias colunas devem ser usados com moderação. Na maioria das vezes, um índice contendo apenas uma coluna é suficiente, economizando espaço e tempo. Um índice com mais de três colunas é quase certo não ser útil, a menos que a utilização da tabela seja muito peculiar.

SourceForge.net Logo CSS válido!