Использование индексов в MS SQL SERVER
На эту формулировку меня натолкнуло использование индексов в учебной БД Northwind.
Подробное описание эксперимента - см. вложение.
"...Выбор индексного доступа или полного сканирования таблицы зависит от фрагмента таблицы, который будет считан однотабличным запросом. Оптимизатор БД может сделать этот выбор за вас, но нет никакой гарантии, что этот выбор всегда будет сделан правильно. Если SQL-запрос выполняется слишком медленно и требует настройки, вам необходимо решить этот вопрос самостоятельно. Далее перечислены основные диапазоны размеров сканируемых фрагментов таблиц, которые помогут выбрать соответствующую стратегию.
* > 20% строк - Полное сканирование таблицы.
* <0.5% строк - Индексный доступ.
* 0.5% -20% - Необходимо рассмотреть дополнительные условия.....
(далее он приводит пример в каких случаях лучше использовать индексный доступ при размере сканируемых фрагментов таблиц, близким к 20%)
... С другой стороны, если выполнятся доступ к диапазону значений, например, Retirement_Date BETWEEN '2002/01/01' and '2003/01/01', то вы обнаружите целую последовательность отсортированных списков идентификаторов строк для каждой даты из диапазона. Движение считывающей головки диска будет менее упорядоченным и, следовательно, менее эффективным. Самокэширование в этом случае может вовсе не произойти, если время выполнения запроса превышает срок жизни блоков в кэше..."
Таким образом, я хочу сказать, что не всегда оптимально осуществлять выборку строк с использованием индекса.;)
Простите меня за глупый вопрос, но откуда сервер должен знать что вам нужно индексировать (т.е. какие поля)?