Индексы ускоряются больше чем> сравнение в MySQL? - PullRequest
12 голосов
/ 19 июля 2011

В моей базе данных есть таблицы событий, в том числе столбцы start_date и end_date.

Я часто запускаю запросы типа

where start_date > 'some starting date' and end_date < 'some end date'

Получу ли я выгоду от добавления индекса в столбцы start_date и end_date? Я понял, что это не = сравнение, но, может быть, в любом случае.

Ответы [ 3 ]

14 голосов
/ 19 июля 2011

Оптимизатор MySQL будет использовать индексы там, где он считает это целесообразным:

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

...

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

Источник: Сравнение B-деревьев и хеш-индексов

Вы можете найти эти интересные:

Как MySQL использует индексы

И этот ответ и этот ответ до Почему MySQL не использует индекс для сравнения больше, чем? .

1 голос
/ 19 июля 2011

Да, база данных будет использовать эти индексы, и это должно повысить производительность.

Примечание: он не может использовать два разных индекса одновременно для хорошей производительности, вам нужен многостолбцовый индекс .

0 голосов
/ 19 июля 2011

По моему опыту, индексы часто не используются для условий больше или меньше, потому что диапазон является открытым, и, таким образом, будет O (n) совпадающих строк для таблицы с n строками.

Однако между интервалами обычно делают индексы, так как диапазон ограничен, поэтому будет O (1) совпадающих строк, поэтому вы можете использовать этот трюк:

where start_date between 'some starting date' and 'some end date'
and end_date beween 'some starting date' and 'some end date'

Посколькудата окончания не может быть раньше даты начала, эти сравнения по-прежнему имеют смысл.

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