Dec 12 2006
MySQL: verificando se um índice existe
Observações: a versão do MySQL usada para os testes foi a 3.2.9. Provavelmente esta solução é compatível com as versões mais novas.
Índices (ou indexes) são perfeitos quando se trata de melhorar o desempenho de acesso ao banco. Hoje mesmo consegui reduzir o tempo de processamento de um SELECT de 16s para 5s. Tendo em vista que a tabela possui mais de 15.000 registros, consegui chegar a um tempo razoável.
Mas esse post não é sobre os benefícios dos índices, e sim sobre como verificar se um determinado índice já existe. Não há um comando específico para checar isso, portanto vamos a baixaria:
1 SHOW INDEX FROM tabela
O comando acima, de acordo com a documentação do MySQL, retorna os índices de uma tabela. Dentre as informações retornadas, existe uma que representa o nome do índice: Key_name. É através deste campo que podemos verificar se um índice existe. Para isso, criei a seguinte rotina (em Delphi):
1 function ExisteIndice(tabela, indice: string): boolean; 2 var 3 query: TSDQuery; 4 begin 5 try 6 query := TSDQuery.Create(nil); 7 query.DatabaseName := 8 dtmDataModule.dtbBancoDados.DatabaseName; 9 query.SQL.Add('SHOW INDEX FROM ' + tabela); 10 query.Open; 11 12 query.First; 13 while (not(query.Eof)) do 14 begin 15 if (query.FieldByName('key_name').AsString = indice) then 16 begin 17 Result := true; 18 Break; 19 end; 20 21 query.Next; 22 end; 23 finally 24 query.Close; 25 FreeAndNil(query); 26 end; 27 end;
O que ela faz? Simples:
- Retorna todos os índices de uma determinada tabela (parâmetro “tabela”);
- Verifica se entre os índices retornados existe algum igual ao passado no parâmetro “indice”;
- Se existir, retorna true. Caso contrário, retorna false.
Pronto! Problema resolvido.
Se você cria dinamicamente as tabelas e índices do seu sistema, pode utilizar esta rotina para verificar se o índice já existe antes de criá-lo. Se existir, poderá ignorar a criação ou removê-lo para criá-lo novamente.
É isso aí. Até +.













