Вопрос

Если у меня есть запрос типа,

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

означает ли наличие datetime_field справка с индексированием столбцов?т. е.полезен ли индекс только при использовании тестирования на равенство (или неравенство), или он также полезен при выполнении упорядоченного сравнения?

(Предложения по улучшению выполнения этого запроса без повторного создания таблицы также были бы в порядке вещей!)

Это было полезно?

Решение

Может быть.В общем случае, если такой индекс существует, он будет использовать сканирование диапазона для этого индекса, если в запросе нет "лучшего" индекса.Однако, если оптимизатор решит, что диапазон в конечном итоге окажется слишком большим (т. е.включать больше, скажем, 1/3 строк), он, вероятно, вообще не будет использовать индекс, так как сканирование таблицы, скорее всего, будет более быстрым.

Используйте ОБЪЯСНЕНИЕ (при ВЫБОРЕ;вы не можете ОБЪЯСНИТЬ удаление), чтобы определить его решение в конкретном случае.Вероятно, это будет зависеть от

  • Сколько строк всего в таблице
  • Какой диапазон вы указываете
  • Что еще указано в предложении WHERE.Он не будет использовать сканирование диапазона одного индекса, если есть другой индекс, который "выглядит лучше".

Другие советы

От Справочное руководство по MySQL:

Индекс B-дерева может использоваться для сравнения столбцов в выражениях, которые используют =, >, >=, <, <=, или МЕЖДУ операторами.

Для большого количества строк поиск по строкам с помощью древовидного индекса может быть намного быстрее, чем с помощью сканирования таблицы.Но, как указывают другие ответы, используйте EXPLAIN чтобы узнать решение MySQL.

Индекс в поле datetime определенно поможет при поиске по диапазону дат.Мы постоянно используем их в наших базах данных, и запросы выполняются чудовищно медленно без индексов.

Это так, проверьте с помощью ОПИСАНИЯ, ВЫБРАННОГО ИЗ таблицы...

За исключением того, что у вас нет этой ошибки в mysql http://bugs.mysql.com/bug.php?id=58190

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top