Рассмотрим следующую таблицу в SQL Server 2008:
LanguageCode varchar(10)
Language nvarchar(50)
LanguageCode участвует в отношениях, поэтому я не могу создать индекс первичного ключа, который включает оба столбца (LanguageCode, Language).
Если я добавлю первичный кластеризованный ключ в LanguageCode, конечно, я не смогу включить язык в индекс (индекс покрытия). Это означает, что мне придется создать второй индекс для языка или рискнуть иметь дубликаты в нем (плюс принудительно сканировать таблицу, чтобы получить его значение).
Кроме того, в документации MS (а также экспертов по этому вопросу) указывается, что таблица должна в идеале иметь кластерный индекс.
В этом случае некластеризованный покрывающий индекс (LanguageCode, Language) не только обеспечит уникальность Language, но и позволит избежать сканирования таблицы. Однако не было бы «идеального» кластерного индекса.
Является ли это одним из тех случаев, когда отсутствие кластеризованного индекса на самом деле идеально?
Редактировать на основе отзывов:
Единственный запрос, который я хочу выполнить:
SELECT Language, LanguageCode FROM Languages where Language="EN"