Ваш стиль очень необычен.
Большинство людей, вероятно, написали бы WHERE began_at < NOW() AND finished_at > NOW()
Однако.Я бы порекомендовал поставить индекс для обоих полей.
Комбинированный ключ не будет вам полезен, потому что он ускорит поиск только для определенных комбинаций дат.
Что ж, это не совсем такпотому что если вы используете betree, комбинированный ключ поможет вам, но не так хорошо, как если бы вы индексировали их отдельно.Комбинированные ключи очень хороши, если вы ищете комбинации полей с оператором равенства (=).Индексы единственного поля работают лучше в запросах ragen.
Вы можете немного погуглить для "поиска в многомерном диапазоне".
Причина в том, что все совпадающие поля в одном поле в основном можно найти в журнале (о) время в деревьях.Таким образом, ваше общее время выполнения будет O (k * log (n)), что равно O (log (n)).
Для запросов многомерного диапазона время выполнения O (sqrt (n)) выше.Однако есть и лучшие реализации, которые также достигают логарифмического времени выполнения.Однако они не полностью реализованы в mysql, поэтому в зависимости от версии будет хуже или ужаснее.
Итак, позвольте мне подвести итог:
Сравнения равенства на отдельных полях: индекс хеша (время выполнения O (1))
Поиск диапазона по отдельным полям: индекс btree по отдельным полям (O (log (n))) *
Поиск равенства по нескольким полям: комбинированный хеш-ключ (время выполнения O (1))
эти случаи очевидны ...
- Поиск диапазона по нескольким полям: отдельные индексы дерева (O (log (n)))
, где это не так ясно.с текущими версиями явно лучше индексировать отдельно по причинам, указанным выше.С идеальной реализацией для этого варианта использования вы могли бы достичь более высокой производительности с помощью комбинированных клавиш, но нет ни одной системы, которая бы знала, которая их поддерживает.mysql поддерживает свободные индексы (которые вам нужны для этого) начиная с версии 5.0, но только очень ограничен, и оптимизатор запросов использует их только в редких случаях.не знаю о более новых версиях, таких как 5.3 или что-то в этом роде.
однако, когда mysql реализует свободные индексы, комбинированные ключи в полях, где вы выполняете запросы диапазона или сортируете в разных направлениях, становятся все более и более актуальными.