Создание индекса с предложением where - SQL SVR 2005 - PullRequest
2 голосов
/ 26 марта 2010

Недавно я обнаружил возможность использовать предложения WHERE в индексах в SQL Server 2005. Я хотел бы оптимизировать некоторые запросы и надеялся получить некоторую обратную связь.

Таблица интереса содержит 2 столбца с плавающей точкой, [long] и [short]. Эти столбцы могут быть 0 в 20-40% строк. Есть несколько сохраненных процедур, которые запрашивают эту таблицу с одним из следующих предложений:

  • ГДЕ (длинный <> 0 ИЛИ короткий <> 0)
  • ГДЕ (длинный <> 0 И короткий <> 0)

Я рассматриваю возможность помещения индексов на длинные и короткие (или один индекс на оба) с условием WHERE <> 0 в надежде, что хранимые процессы смогут использовать сканирование индекса, а не сканирование таблицы, чтобы получить эти данные .

Учитывая вышеприведенную информацию, как бы вы занялись созданием индексов? Или, если индекс не является лучшим решением, каковы разумные альтернативы? Заранее спасибо.

1 Ответ

6 голосов
/ 26 марта 2010

Использование предложений Where при создании индекса является функцией SQL Server 2008 - отфильтрованные индексы не входят в состав SQL Server 2005.

Отфильтрованные индексы следуют тем же правилам в отношении опрокидывания, что и обычные NC, не покрывающие индексы, поэтому при 60-80% строк, равных <> 0, вероятность того, что индекс переместится на сканирование таблицы / кластерного индекса.

Единственный способ избежать этого - это покрыть индекс, но мы не можем увидеть остальную часть предложения / выбора, чтобы узнать, является ли это разумным вариантом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...