Índices na base de dados com o phpMyAdmin: os tipos, a ordem das colunas e como acrescentar um

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

1 Faça uma cópia da base de dados antes. Veja exportar com o phpMyAdmin. Não há “desfazer” no phpMyAdmin.
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.

Tem uma consulta lenta e já a mediu com EXPLAIN? Envie-nos o resultado e a tabela, e vemos consigo.

Abrir um pedido de suporte

VEJA TAMBÉM

Consultas lentas: como as encontrar e as correcções que mais resultam

Exportar uma base de dados com o phpMyAdmin

Criar bases de dados e usar o phpMyAdmin

Hospedagem e o que cada plano inclui

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
  • 0 Utilizadores acharam útil
Esta resposta foi útil?