Criação de índices no PostgreSQL
Publicado em 19/12/2012
PostgreSQL
Com o passar do tempo e consequentemente o aumento da base de dados, as consultas podem ficar lentas. Se você já se deparou com problema de performance nas suas consultas ao banco de dados e nem se quer sabia que existia indices de tabelas, vai adorar saber o que são e o poder de um índice para o tunning de banco de dados.
O que são índices?
De acordo com Smith (2010, p. 209), "An index is simply an organized list of values that appear in one or more columns in a table. ". Ou seja, um valor/coluna utilizada para identificar as tuplas (linha, registro) de uma tabela e facilitar a localização em uma consulta, assim como em um índice de livro. Um índice não necessariamente precisa ser uma chave primaria (que não permite chaves iguais) e pode ser usado em valores que se repetem.
Tipos de índices
Existem muitos tipos de índices e cada SGBD (Sistema Gerenciador de Banco de Dados) tem os seus tipos de índices. Nesse artigo irei abordar os dois principais, o tipo BTREE e o tipo HASH.
Índice btree
Utilizado para indexar colunas que geralmente serão consultadas por intervalo. Por exemplo o campo salário, onde geralmente serão buscado as tuplas por um intervalo de valores desse campo.
Índice hash
Utilizado para indexar colunas que serão consultadas por um valor exato. Por exemplo o campo RG que apesar de poder repetir, geralmente serão consultado as tuplas usando a condição de igualdade para esse campo.
Entendendo as estruturas de dados
Tabela hash
Os índices do tipo hash usam o conceito de tabela hash onde a tupla não é pesquisada sequencialmente e sim calculada, ou seja, a posição da tupla no banco de dados é calculado por um algoritmo e a tupla é imediatamente acessada sem precisar percorrer uma a uma procurando pela condição.
CPF
Nome
123.456.789-01
Maria
987.654.321-09
João
132.546.879-10
Rafael
Por exemplo que exista uma tabela com duas colunas e três linhas. Se o campo 'cpf'