Я искал использование индексированных представлений для повышения производительности в некоторых из наших наиболее часто используемых представлений.
Однако индексированные представления не поддерживают неуникальные кластерные индексы, что немного противоречит приоритету, установленному остальной частью структуры базы данных.
Например, вот упрощенная версия пары наших таблиц.
-Groups-
Group ID GroupName
-Users-
UserKey UserName FullName GroupID
Индексы находятся на Groups.GroupID (некластеризованный) и Users.GroupID (кластеризованный). Кластерный ключ находится в GroupID в таблице Users, поскольку чаще всего будет найден диапазон пользователей из определенной группы. Очевидно, у вас будет несколько пользователей на группу, поэтому этот кластерный индекс не является уникальным.
Это оставляет меня немного неуверенным в том, как следовать этому приоритету при индексации моих представлений, таких как этот пример, поскольку у меня не может быть неуникального кластеризованного индекса.
ConsumableID ConsumableVariantID AllowThresholdOverwrite FullPath GroupID ManufacturerID Type ModelID
101 29 1 0.1.2.4. 4 3 3 2
На самом деле единственное значение в этом представлении, которое всегда будет уникальным, - это столбец ConsumableID, поэтому у меня практически нет выбора, где разместить свой индекс.
Почему представления не разрешают неуникальные кластеризованные индексы, когда это делают обычные таблицы?
(GroupID, UserID)
. Не ограничивайте себя одним столбцом для ключа. 2 - Я предполагаю, что ограничение для представления связано с тем, что это дополнительный объект данных, который должен иметь строки, легко привязанные к индексам NC. Для таблицы к неуникальному ключу CI добавляется int, но я думаю, что это будет сложнее с индексированным представлением, так как это не фактическая таблица, а нужно ОТРАЖАТЬ реальную таблицу.