segunda-feira, 13 de fevereiro de 2012

Melhorando a performance da sua consulta SQL, utilizando índice


Este tutorial visa apresentar o que são, porque usar e quando usar índices.

Índice é simplesmente um ponteiro para um dado na tabela. Por exemplo, um livro possui um índice,e neste índice é indicado o número da página que se encontra determinado assunto, no qual irá facilitar encontrar o assunto com maior rapidez. A mesma coisa acontece com os índices.
Ao invés de procurar por todos os dados de uma tabela, é verificado no índice, aonde se encontra determinado dado.

Como os índices funcionam?

Quando uma query é executada, e existe uma condição na cláusula Where que está indexada, é procurado
primeiramente nos índices para encontrar o local exato aonde se encontra aquele dado.Caso não tenha
encontrado nenhum índice, é feita uma procura na tabela inteira.

Criando um índice:
CREATE INDEX nome_indice ON nome_tabela (nome_coluna)

Índices únicos:

Índice único não permite valores duplicados em uma tabela.
CREATE UNIQUE INDEX nome_indice ON nome_tabela (nome_coluna)

Índices compostos:

Índice que é composto por duas ou mais colunas. A escolha de quem vem primeiro no índice pode gerar problemas de performance, por isso é recomendável sempre escolher o indice mais restrito (único) como o primeiro e o menos restrito como segundo.
CREATE UNIQUE INDEX nome_indice ON nome_tabela (nome_coluna1, nome_coluna2)

Quando é aconselhável usar índices?

 - Para PKs o uso de índice é implícito.
 - Para todas as FKs deveriam ser criados índices.
 - Colunas que são geralmente referencias por ORDER BY e GROUP BY
 - Colunas que geralmente são usadas em cláusulas WHERE e possui valores mais restritos (únicos)


Quando não é aconselhável o uso de índices?

 - Tabelas pequenas
 - Em colunas que retornam uma grande quantidade de dados.
    Exemplo:
Select * from Pessoas where ds_sexo='Masculino' 
    você não irá encontrar no indice de uma lista telefônica separação por sexo, mas sim pela inicial de cada nome.
 
 - Colunas que possam ter muitos valores nulos

Um comentário: