14 mar 2014
Visão geral sobre índices no MySQL

Podemos definir índices basicamente como, uma referência associada a uma chave com o objetivo de otimização, permitindo que uma consulta localize rapidamente um registro. Uma comparação muito frequente é a de um índice remissivo de um livro, onde selecionamos determinado assunto no índice do livro verificamos sua página e depois localizamos essa página para leitura.
O MySQL suporta os seguintes tipos de índices:
- PRIMARY KEY
- UNIQUE
- INDEX
- FULLTEXT
Abaixo seguem algumas características e regras para utiliza-los:
- Índice não único é um no qual qualquer valor da chave pode ocorrer múltiplas vezes. Este tipo de índice é definido com a palavra chave INDEX ou KEY;
- Índice UNIQUE possui valor único, ou seja, cada valor da chave deve ser diferente de todos os outros (a exceção é que valores NULL podem ocorrer múltiplas vezes);
- PRIMARY KEY também é um índice de valores únicos. Ela é semelhante a um índice UNIQUE, mas tem restrições adicionais;
- Uma tabela pode conter múltiplos índices UNIQUE, mas no máximo uma PRIMARY KEY;
- Um índice UNIQUE pode conter valores NULL, enquanto que uma PRIMARY KEY não;
- Índice FULLTEXT é projetado especialmente para a busca em texto;
Fonte: Livro MySQL – Guia de Estudo para Certificação.
Podemos criar índices ao mesmo tempo em que criamos tabelas, como no script abaixo onde estão sendo criados índices PRIMARY KEY, UNIQUE e INDEX:
1 2 3 4 5 6 7 8 9 10 11 |
CREATE TABLE `USUARIO` ( `ID` int(11) NOT NULL AUTO_INCREMENT, `NOME` varchar(45) NOT NULL, `USER` varchar(20) NOT NULL, `SENHA` varchar(50) NOT NULL, `STATUS` enum('A','I') NOT NULL, `DATA_CADASTRO` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`ID`), UNIQUE KEY `USER_UNIQUE` (`USER`), KEY `NOME_INDEX` (`NOME`) ) |
Se a tabela já existe podemos usar os comandos ALTER TABLE ou CREATE INDEX:
1 2 3 |
ALTER TABLE nome_tabela ADD INDEX nome_indice (campo_tabela); CREATE INDEX nome_indice ON nome_tabela (campo_tabela); |
Para excluir um índice podemos usar os comandos ALTER TABLE ou DROP INDEX:
1 2 3 |
ALTER TABLE nome_tabela DROP INDEX nome_indice; DROP INDEX nome_indice; |
E finalizando podemos usa o comando SHOW INDEX para listar todos os índices de uma tabela:
1 |
SHOW INDEX FROM nome_tabela; |
Bom pessoal esse conteúdo foi uma visão geral sobre como trabalhar com índices no MySQL, espero que esse artigo sirva como preparação para o próximo tema que será sobre otimização de consultas no MySQL e para esse tema é necessário ter um breve conhecimento sobre os tipos de índices suportados pelo MySQL.
Até a próxima …