Выполняет ли index <или> запросы MySQL?

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

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!)

Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
10
0
2 442
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Это так, проверьте с помощью таблицы DESCRIBE SELECT FROM ...

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

Ответ принят как подходящий

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

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

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

Возможно, это должен быть дополнительный вопрос, но есть ли простой ответ (или ссылка на часть документации MySQL), который объясняет, как оптимизатор принимает решение о том, что диапазон слишком велик? Конкретный случай не имеет ничего другого в ГДЕ.

Tony Meyer 24.09.2008 13:36

От Справочное руководство по 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

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