Любой индекс с "startdate" в качестве первого столбца может помочь с поиском startdate> = @ date1. Любой индекс с «конечной датой» в качестве первого столбца может помочь с поиском «конечной даты <= @ date2». Но нет никакого индекса, который мог бы помочь с обоими. </p>
И если предположить, что с той же начальной датой почти нет конечных дат, индекс on (startdate, enddate) не более полезен, чем индекс on (startdate).
Таким образом, сканирование таблиц выглядит как надежный выбор для Sql Server.
Даже если вы ищете startdate> = @ date1, все равно имеет смысл выполнить сканирование таблицы. Сканирование индекса дало бы вам много ссылок на таблицу, которую вам нужно было бы разрешить, но это не стоит большого количества данных.
Один запрос, который должен использовать индекс:
select * from session where startdate = @date1
В любом случае, если вы считаете, что знаете лучше, чем оптимизатор, вы можете принудительно использовать индекс, например:
select *
from session with (index indexname)
where startdate>=@date1 and enddate <=@date2