14-Índices: Conceito e Criação
Materiais desta aula
Índices: Conceito e Criação
1. O que é um índice?
Pense no índice remissivo no final de um livro grosso: em vez de ler página por página procurando "fotossíntese", você olha no índice, vê "fotossíntese — página 214" e vai direto lá. Um índice de banco de dados funciona parecido: é uma estrutura extra que o MySQL mantém para encontrar registros muito mais rápido, sem precisar olhar linha por linha.
Sem índice, o MySQL faz uma busca sequencial (full table scan): olha registro por registro até achar o que você pediu. Numa tabela com 100 mil linhas, isso pode levar segundos ou minutos. Com o índice certo, a mesma busca pode levar uma fração de segundo.
2. Vocês já usam índices, sem perceber
Boa notícia: PRIMARY KEY e UNIQUE já criam um índice automaticamente. Desde o Encontro 2, toda vez que vocês definiram uma chave primária, o MySQL já estava criando um índice por trás dos panos — é por isso que buscar um aluno pela matrícula já é rápido, mesmo sem vocês terem pedido um índice explicitamente.
Hoje aprendemos a criar índices em outras colunas — as que são muito usadas em buscas, mas não são PK nem UNIQUE.
3. CREATE INDEX
CREATE INDEX nome_do_indice ON tabela(coluna);
Exemplo:
CREATE INDEX idx_aluno_nome ON aluno(nome);
Convenção: prefixar o nome do índice com
idx_, para ficar claro o que é, ao olhar a lista de objetos da tabela.
4. Verificando os índices de uma tabela
SHOW INDEX FROM aluno;
Mostra todos os índices da tabela — incluindo os automáticos (PK, UNIQUE) e os que você criou manualmente.
5. Removendo um índice
DROP INDEX idx_aluno_nome ON aluno;
6. Quando usar (e quando NÃO usar) um índice
Índice não é "sempre bom, quanto mais melhor". Ele tem um custo:
- Acelera buscas (SELECT com WHERE, JOIN, ORDER BY na coluna indexada).
- Desacelera um pouco as inserções/alterações (INSERT, UPDATE, DELETE) — porque, toda vez que uma linha muda, o índice também precisa ser atualizado.
- Ocupa espaço em disco — o índice é uma estrutura extra, guardada separadamente.
Critério prático: crie índices em colunas que você usa com frequência para buscar ou ordenar (ex.: nome, e-mail, data), e evite indexar colunas que quase nunca aparecem em uma busca — o custo de manutenção não compensaria.
7. Prévia do próximo encontro
No Encontro 15, vamos escrever um script DDL completo — juntando tudo que vimos no Bloco 3 (CREATE TABLE, tipos de dados, constraints, FK, índices) num só arquivo, para o cenário da nossa biblioteca — e fazer a revisão geral do bimestre.
Vídeos sobre o assunto
- Indexar Tabelas em MySQL — CREATE INDEX — mostra como criar e excluir índices, e uma introdução ao comando EXPLAIN.
Para se aprofundar
- Índices em MySQL — Bóson Treinamentos — tutorial completo sobre CREATE INDEX, DROP INDEX e SHOW INDEX, com exemplos práticos.