Um índice é uma lista ordenada de uma coluna (ou de várias) que a base de dados consulta em vez de ler a tabela inteira. Para encontrar um cliente pelo e-mail, sem índice ela percorre linha a linha; com índice, vai direita ao sítio. A troca é esta: as leituras ficam mais rápidas, as escritas ficam um pouco mais lentas e o índice ocupa espaço. Por isso se acrescentam poucos, e escolhidos.
Este artigo ensina a escolher o tipo e a acrescentar o índice. Para descobrir qual consulta pede um, comece por consultas lentas: como as encontrar.
Os tipos que vai encontrar
| Tipo |
Para que serve |
| PRIMARY |
Identifica cada linha. Só há um por tabela, sem repetições nem vazios. Quase sempre é a coluna id. |
| UNIQUE |
Impede dois valores iguais, por exemplo o e-mail de um utilizador. Além de rápido, serve de regra. |
| INDEX (normal) |
Acelera pesquisas e ordenações numa coluna que se repete: estado de uma encomenda, data, categoria. |
| FULLTEXT |
Pesquisa por palavras dentro de texto longo. É outra ferramenta, com outra sintaxe de consulta; não substitui o índice normal. |
Índice de várias colunas: a ordem conta
Um índice sobre (estado, data) ajuda consultas que filtram por estado, ou por estado e data. Não ajuda uma consulta que filtra só por data. Funciona como uma lista telefónica ordenada por apelido e depois por nome próprio: serve para procurar pelo apelido, não pelo nome sozinho. Regra prática: ponha primeiro a coluna que a consulta compara com igual, e depois a que usa intervalo.
Acrescentar um índice, passo a passo
| 2 |
No cPanel abra o phpMyAdmin, escolha a base na coluna da esquerda e depois a tabela.
|
|
| 3 |
Abra o separador Structure. Na parte de baixo vê a lista de índices que já existem: confirme que a coluna ainda não tem um, ou que o primeiro não a cobre já.
|
|
| 4 |
Para um índice numa só coluna, use a opção Index na linha dessa coluna. Para várias, use o campo “criar um índice” por baixo da lista, indique o número de colunas, escolha-as pela ordem certa e dê-lhe um nome.
|
|
| 5 |
Pelo separador SQL é o mesmo, numa linha: ALTER TABLE encomendas ADD INDEX idx_estado (estado);. Para o tirar: ALTER TABLE encomendas DROP INDEX idx_estado;.
|
|
| 6 |
Meça outra vez. Repita o EXPLAIN da consulta e veja se passou a usar o índice. Sem medir, não sabe se ajudou.
|
|
|
Mais índices não é melhor. Cada um gasta espaço e atrasa cada inserção e cada alteração. Não indexe todas as colunas, nem colunas de texto longo sem necessidade (em colunas de texto indexa-se só o início, por exemplo descricao(50)). Numa tabela enorme, criar o índice leva tempo: faça-o fora das horas de maior uso.
|
|
Tabelas do WordPress e de lojas: não acrescente índices às tabelas do núcleo por palpite. Se um plugin lento traz uma indicação de índice na sua documentação, siga-a. Se não, o problema costuma estar na consulta do plugin, e a cura é outra: veja a base de dados cresceu: o que pode sair.
|
PRODUTO RECOMENDADO Alojamento de sites com cPanel Domínio e SSL incluídos, cópias diárias e o painel que já conhece. desde 5.940,00 Kz/mês (plano de 3 anos, com cupão) Ver planos |