14 mar 2014
Visão geral sobre índices no MySQL
Apresentarei aqui uma Visão geral sobre índices no MySQL, onde vamos falar sobre um assunto muito importante para qualquer tipo de sistema que utilize um banco de dados, quer seja WEB, Mobile ou Dektop, são os índices. Nesse artigo o foco são os vários tipos de índices existentes no MySQL e como usá-los da melhor maneira.
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 …