Подтвердить что ты не робот

Нулевы ли значения индекса SQL Server в некластерном не-уникальном индексе?

Я рассматриваю возможность добавления столбца в таблицу базы данных, и этот столбец может быть пустым, возможно, для большинства строк, но я хочу иметь возможность запрашивать этот столбец для конкретных ненулевых значений. Поэтому индекс будет помогать с временем поиска, однако, если включены нулевые значения, которые разрушили бы селективность моего индекса.

Я сделал некоторое чтение, и у меня сложилось впечатление, что SQL Server не обязательно придерживается стандартов, когда речь заходит о значениях и индексах NULL, но я не могу найти явного утверждения о теме в документации (Основы проектирования индексов, Некластеризованные структуры индексов и Некластеризованные рекомендации по дизайну индексов). Я также не мог найти вопрос о SO, рассматривая эту тему.

Любой ввод (особенно с ссылкой на документацию) будет очень оценен!

Примечание. Я использую SQL Server 2008, но если произошли соответствующие изменения между '05 до '12, мне интересно узнать об этом.

4b9b3361

Ответ 1

Я бы предложил отфильтрованный индекс, например WHERE column IS NOT NULL; - это позволит вам создать индекс, который только мешает индексировать значения, отличные от NULL, и игнорировать все строки без значения. Вероятно, вы захотите убедиться, что индекс охватывает запросы, которые вы хотите использовать с этим типом предиката, поэтому вам не нужно возвращаться во всю таблицу для поиска других столбцов, которые запрос должен выводить (или использовать в соединении или в другом фильтре и т.д.).

Подробнее здесь.