Если у меня есть такой запрос,
DELETE FROM table WHERE datetime_field < '2008-01-01 00:00:00'
помогает ли индексированный столбец datetime_field? т.е. полезен ли индекс только при использовании проверки на равенство (или неравенство), или он также полезен при выполнении упорядоченного сравнения?
(Suggestions for better executing this query, without recreating the table, would also be ok!)






Это так, проверьте с помощью таблицы DESCRIBE SELECT FROM ...
Индекс в поле datetime определенно поможет при поиске по диапазону дат. Мы все время используем их в наших базах данных, и без индексов запросы выполняются очень медленно.
Может быть. В общем, если такой индекс существует, он будет использовать сканирование диапазона по этому индексу, если в запросе нет «лучшего» индекса. Однако, если оптимизатор решит, что диапазон окажется слишком большим (то есть будет включать более, скажем, 1/3 строк), он, вероятно, вообще не будет использовать индекс, поскольку сканирование таблицы, вероятно, будет Быстрее.
Используйте EXPLAIN (для SELECT; вы не можете EXPLAIN для удаления), чтобы определить его решение в конкретном случае. Это, вероятно, будет зависеть от
От Справочное руководство по MySQL:
A B-tree index can be used for column comparisons in expressions that use the =, >, >=, <, <=, or BETWEEN operators.
Для большого количества строк поиск строк через индекс дерева может быть намного быстрее, чем через сканирование таблицы. Но, как указывают другие ответы, используйте EXPLAIN, чтобы узнать решение MySQL.
За исключением того, что у вас нет этой ошибки в mysql http://bugs.mysql.com/bug.php?id=58190
Возможно, это должен быть дополнительный вопрос, но есть ли простой ответ (или ссылка на часть документации MySQL), который объясняет, как оптимизатор принимает решение о том, что диапазон слишком велик? Конкретный случай не имеет ничего другого в ГДЕ.