Нулевы ли значения индекса SQL Server в некластерном не-уникальном индексе?
Я рассматриваю возможность добавления столбца в таблицу базы данных, и этот столбец может быть пустым, возможно, для большинства строк, но я хочу иметь возможность запрашивать этот столбец для конкретных ненулевых значений. Поэтому индекс будет помогать с временем поиска, однако, если включены нулевые значения, которые разрушили бы селективность моего индекса.
Я сделал некоторое чтение, и у меня сложилось впечатление, что SQL Server не обязательно придерживается стандартов, когда речь заходит о значениях и индексах NULL, но я не могу найти явного утверждения о теме в документации (Основы проектирования индексов, Некластеризованные структуры индексов и Некластеризованные рекомендации по дизайну индексов). Я также не мог найти вопрос о SO, рассматривая эту тему.
Любой ввод (особенно с ссылкой на документацию) будет очень оценен!
Примечание. Я использую SQL Server 2008, но если произошли соответствующие изменения между '05 до '12, мне интересно узнать об этом.
Ответы
Ответ 1
Я бы предложил отфильтрованный индекс, например WHERE column IS NOT NULL;
- это позволит вам создать индекс, который только мешает индексировать значения, отличные от NULL, и игнорировать все строки без значения. Вероятно, вы захотите убедиться, что индекс охватывает запросы, которые вы хотите использовать с этим типом предиката, поэтому вам не нужно возвращаться во всю таблицу для поиска других столбцов, которые запрос должен выводить (или использовать в соединении или в другом фильтре и т.д.).
Подробнее здесь.