Одной из основных целей индекса в запросе является уменьшение количества страниц данных, к которым осуществляется доступ.Каждая страница данных обычно содержит много записей - десятки или сотни.
Использование индекса приводит к накладным расходам:
- Страницы индекса необходимо считывать в память.
- Связанные страницы данных также необходимо считывать в память.
- К страницам данных не обращаются по порядку, что может привести к перебоям в условиях нехватки памяти (больших данных).
Если вы получаете доступ к половине записей, то вы по-прежнему получаете доступ ко всем страницам данных.В результате оптимизатор базы данных решает, что дешевле прочитать их все и выполнить сравнение, а не вызывать индекс.
Что вы можете сделать?Один из вариантов - создать индекс, который охватывает вашего запроса.То есть вместо индексации (minutes)
, индекс (minutes, friend)
.Поскольку все столбцы находятся в индексе, доступ к страницам данных не требуется.
Вторая возможность заключается в создании кластеризованного индекса с minutes
в качестве первого ключа.В вашем случае, вероятно, не требуется кластеризованный индекс, но это также ограничит базу данных только чтением необходимых данных.