MySQL Índice: Tutorial de Criar, Adicionar e Soltar
⚡ Resumo Inteligente
MySQL O tutorial sobre índices aborda como os índices classificam e localizam dados rapidamente. Um índice é uma estrutura de pesquisa ordenada criada em uma ou mais colunas; o comando CREATE INDEX o adiciona, o comando SHOW INDEXES o inspeciona e o comando DROP INDEX o remove quando as tabelas com alta frequência de escrita superam os benefícios da leitura.

O que é uma MySQL Índice?
An índice in MySQL Um índice é uma estrutura de dados que armazena valores de colunas de forma ordenada, permitindo que o mecanismo de busca encontre as linhas rapidamente. Os índices são criados na(s) coluna(s) mais frequentemente usada(s) para filtrar dados. Pense em um índice como uma lista ordenada alfabeticamente: é muito mais rápido encontrar um nome em uma lista ordenada do que em uma lista desordenada.
Os índices apresentam uma desvantagem: cada operação de INSERT ou UPDATE precisa manter o índice, portanto, adicionar muitos índices em uma tabela com alta frequência de escrita pode prejudicar o desempenho geral. Como regra geral, indexe as colunas que aparecem nas cláusulas WHERE, JOIN e ORDER BY em tabelas que são lidas com mais frequência do que escritas.
Por que usar um índice?
Ninguém gosta de sistemas lentos. Alto desempenho é uma preocupação primordial para quase todos os aplicativos baseados em banco de dados. As empresas investem pesado em hardware para manter as consultas rápidas, mas existe um limite para o que o hardware sozinho pode oferecer. Otimizar índices é uma alternativa mais barata e eficaz.
Tempos de resposta lentos geralmente ocorrem porque as linhas são armazenadas em ordem física no disco. Sem um índice, MySQL É necessário examinar cada linha para encontrar aquelas que correspondem a um predicado — uma “varredura completa da tabela”. Os índices permitem MySQL pular diretamente para as linhas correspondentes, o que transforma o plano de consulta de O(n) para aproximadamente O(log n) para pesquisas em árvores B.
Sintaxe: Criar Índice
Um índice pode ser definido em dois lugares:
- No momento da criação da tabela.
- Após a tabela já existir.
Exemplo: Criar um índice em linha com CREATE TABLE
Para o myflixdb No banco de dados, esperamos muitas buscas na coluna de nome completo. O script abaixo cria uma nova members_indexed tabela com um índice no full_names coluna.
CREATE TABLE `members_indexed` (
`membership_number` INT(11) NOT NULL AUTO_INCREMENT,
`full_names` VARCHAR(150) DEFAULT NULL,
`gender` VARCHAR(6) DEFAULT NULL,
`date_of_birth` DATE DEFAULT NULL,
`physical_address` VARCHAR(255) DEFAULT NULL,
`postal_address` VARCHAR(255) DEFAULT NULL,
`contact_number` VARCHAR(75) DEFAULT NULL,
`email` VARCHAR(255) DEFAULT NULL,
PRIMARY KEY (`membership_number`),
INDEX (`full_names`)
) ENGINE = InnoDB;
Execute o script em MySQL Bancada de trabalho contra o myflixdb base de dados.
revisar myflixdb para ver o novo members_indexed tabela. O full_names A coluna agora aparece abaixo do Índices nó.
Com o aumento do número de membros, as pesquisas sobre members_indexed que usam WHERE e ORDER BY contra full_names são muito mais rápidas do que as mesmas consultas no original. members tabela sem o índice.
Adicione um índice após a tabela já existir.
Você frequentemente descobrirá que uma tabela existente precisa de um índice — as consultas de pesquisa são lentas e um plano EXPLAIN mostra uma varredura completa da tabela em uma coluna que aparece na cláusula WHERE. CREATE INDEX A instrução adiciona um índice sem recriar a tabela.
CREATE INDEX `id_index` ON `table_name` (`column_name`);
Exemplo concreto — acelerar as buscas no title coluna do movies tabela:
CREATE INDEX `title_index` ON `movies` (`title`);
Toda consulta que filtra por movies.title agora está respaldada pelo novo índice. Consultas que filtram por outras colunas ainda percorrem a tabela, a menos que tenham seu próprio índice.
Observação: Você pode criar um índice composto em várias colunas quando suas consultas sempre filtram ou classificam pela mesma combinação. A ordem importa — a coluna principal determina se o índice pode ser usado.
Listar índices em uma tabela
Uso SHOW INDEXES Para visualizar todos os índices definidos em uma tabela.
SHOW INDEXES FROM `table_name`;
Exemplo — liste os índices do movies tabela:
SHOW INDEXES FROM `movies`;
Execute a instrução em MySQL Workbench contra myflixdb Para visualizar os índices existentes e as colunas que eles abrangem.
Observação: As chaves primárias e estrangeiras são indexadas automaticamente por MySQLCada índice possui um nome único e lista as colunas que abrange.
Sintaxe: Remover Índice
Uso DROP INDEX Remover um índice existente de uma tabela. Isso é útil quando uma tabela com muitas gravações está sendo prejudicada por um índice que não está mais sendo útil nas leituras.
DROP INDEX `index_id` ON `table_name`;
Exemplo concreto — solte o full_names índice de members_indexed:
DROP INDEX `full_names` ON `members_indexed`;
Tipos de MySQL Índices
MySQL Suporta diversos tipos de índice, cada um adequado a uma carga de trabalho diferente.
| Formato | Propósito |
|---|---|
| CHAVE PRIMÁRIA | Identificador de linha único; agrupado com os dados da tabela no InnoDB. |
| UNIQUE | Garante a singularidade e, ao mesmo tempo, serve como índice. |
| ÍNDICE (árvore B) | Índice secundário padrão usado para consultas de intervalo e pesquisas de igualdade. |
| TEXTO COMPLETO | Otimizado para pesquisa de texto em linguagem natural com CORRESPONDÊNCIA... CONTRA. |
| ESPACIAL | Índice R-tree para tipos de dados GIS, como PONTO e POLÍGONO. |
| JOGO DA VELHA | Consultas de igualdade em tempo constante; usadas pelo mecanismo de armazenamento MEMORY. |
| Composto (multicoluna) | Combina várias colunas em um único índice; respeita a regra do prefixo mais à esquerda. |
Melhores Práticas para MySQL Índices
Os hábitos abaixo mantêm os índices úteis e evitam que se tornem um peso morto.
- Índice para o padrão de consulta, não para o nome da coluna: Adicione índices que correspondam às cláusulas WHERE, JOIN e ORDER BY reais, e não a "todas as colunas que parecem importantes".
- Ordem de índice composto do Watch: A coluna principal deve aparecer na consulta para que o índice seja utilizado.
- Evite índices duplicados: Um prefixo inicial de um índice composto já abrange as pesquisas de coluna única nesse prefixo.
- Inspecionar com EXPLICAR: Confirme se o planejador está realmente selecionando o novo índice.
- Remover índices não utilizados: usar
sys.schema_unused_indexesin MySQL 5.7+ para encontrar índices que nada lê. - Tipos de dados correspondentes: Se uma cláusula WHERE comparar uma coluna VARCHAR a um número, o índice não poderá ser usado devido a uma conversão implícita.


