Pergunta

Se eu tenho uma consulta, como,

DELETE FROM table WHERE datetime_field < '2008-01-01 00:00:00'

Ter o datetime_field Ajuda indexada na coluna? ou seja, o índice é útil apenas ao usar o teste de igualdade (ou desigualdade), ou é útil ao fazer uma comparação ordenada também?

(Sugestões para executar melhor esta consulta, sem recriar a mesa, também ficariam bem!)

Foi útil?

Solução

Pode ser. Em geral, se houver um índice, ele usará uma varredura de intervalo nesse índice se não houver índice "melhor" na consulta. No entanto, se o otimista decidir que o intervalo acabaria sendo muito grande (ou seja, incluir mais do que, digamos, 1/3 das linhas), provavelmente não usará o índice, pois uma varredura de tabela provavelmente será mais rápido.

Use explicar (em uma seleção; você não pode explicar uma exclusão) para determinar sua decisão em um caso específico. É provável que dependa

  • Quantas linhas existem na mesa
  • Qual é o alcance que você está especificando
  • O que mais é especificado na cláusula onde. Ele não usará uma varredura de um índice se houver outro índice que "pareça melhor".

Outras dicas

A partir de Manual de referência MySQL:

Um índice B-Tree pode ser usado para comparações de colunas em expressões que usam o =,>,> =, <, <=, ou entre os operadores.

Para um grande número de linhas, pode ser muito mais rápido procurar as linhas através de um índice de árvore do que através de uma varredura de tabela. Mas como as outras respostas apontam, use EXPLAIN Para descobrir a decisão do MySQL.

Um índice no campo DateTime definitivamente ajudará nas pesquisas baseadas em intervalo. Nós os usamos o tempo todo em nossos bancos de dados e as consultas são ridiculamente lentas sem os índices.

Faça, verifique com uma descrição Selecionar da tabela ...

Exceto que você não tem esse bug em mysql http://bugs.mysql.com/bug.php?id=58190

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top