Обращается ли запрос <или> MySQL?

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

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

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

(Предложения по более эффективному выполнению этого запроса, без воссоздания таблицы, также будут в порядке!)

Ответ 1

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

Используйте EXPLAIN (на SELECT, вы не можете EXPLAIN удалить), чтобы определить его решение в конкретном случае. Вероятно, это зависит от

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

Ответ 2

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

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

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

Ответ 3

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

Ответ 4

Он делает, проверяет таблицу DESCRIBE SELECT FROM...