Индекс <или> MySQL запрашивает? - PullRequest
10 голосов
/ 24 сентября 2008

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

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

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

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

Ответы [ 5 ]

11 голосов
/ 24 сентября 2008

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

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

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

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

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

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

2 голосов
/ 24 сентября 2008

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

1 голос
/ 24 сентября 2008

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

0 голосов
/ 26 февраля 2014

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...