Обращается ли запрос <или> 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...
Ответ 5
Если у вас нет этой ошибки в mysql http://bugs.mysql.com/bug.php?id=58190