Почему в запросе с предложением даты не используется индекс доступа?
Поскольку использование индекса даты позволяет игнорировать большую часть данных в таблице. Скорее всего, таблица содержит в основном исторические данные, и многие из них относятся к датам, которые намного раньше, чем начало текущего месяца, поэтому критерий даты является выборочным и снижает нагрузку на оптимизатор, позволяя ему игнорировать большинство данных.
Если бы он использовал индекс доступа, он также должен прочитать каждую строку (а также каждую запись индекса), чтобы увидеть, соответствует ли дата критерию поиска. Это означает чтение всего индекса и всей таблицы - фактически, в контексте было бы лучше игнорировать индекс, но я начал с «если бы он использовал индекс доступа».
Существуют ли какие-либо другие индексы, которые я могу использовать для ускорения запросов для отдельных идентификаторов доступа в определенные промежутки времени?
В зависимости от сложности оптимизатора, индекс на (date, accessid) может улучшить ситуацию. Он может выполнять поиск по диапазону в ведущем столбце индекса, а конечный столбец означает, что ему не нужно обращаться к данным в таблице, чтобы установить accessid - информация находится в индексе. Таким образом, это может преобразовать запрос, который обращается к индексу и таблице, в тот, который обращается только к индексу, - что уменьшит количество необходимых операций ввода-вывода и, следовательно, повысит производительность запроса.
Если у вас есть другие критерии, которым нужны данные из других столбцов, или вам нужно возвращать больше, чем просто уникальные значения accessid, то вы в конечном итоге читаете часть данных таблицы; это, вероятно, все еще выигрыш по сравнению со сканированием всей таблицы.