SQL Server 2008 - Понимание индексированных представлений - PullRequest
2 голосов
/ 08 ноября 2011

Я хочу попытаться понять, что делает SQL Server 2008 при создании индексированного представления.

Скажи, что у меня есть следующее:

CREATE View [vwCoaterC48] WITH SCHEMABINDING
AS

Select
    ID,
    equipment_id as EquipmentId,
    read_time as ReadTime,
    C48_R_Act_Temperature,
    C48_L_Act_Temperature,
    C48_C_Act_Temperature
From dbo.td_coater_c48 c
Where read_time >= Convert(dateTime,'11/4/2011',120)

CREATE UNIQUE CLUSTERED INDEX [IX_vwCoaterC48_ReadTime_EquipmentID_ID] ON [vwCoaterC48] 
(
    [ReadTime] ASC,
    [EquipmentId] ASC,
    [ID] ASC
)

Правильно ли, что SQL Server создаст для этого какое-то физическое хранилище (таблица ?, что?). Физическое хранилище, или таблица, будет содержать только те строки, в которых столбец read_time равен> = 11/4/2011, а в указанных столбцах будет кластеризованный индекс?

1 Ответ

7 голосов
/ 08 ноября 2011

«Таблица» - это логическая концепция, для «таблицы» нет концепции хранения.В качестве хранилища SQL Server понимает два типа хранилища: куча (набор неупорядоченных строк) или b-дерево (упорядоченный набор строк).Индекс (кластеризованный или некластеризованный) - это b-дерево, «таблица» без кластеризованного индекса имеет кучу для базового хранилища.

При создании индексированного представления добавляется новое b-дерево, содержащее строкикоторый удовлетворил запрос в соответствии с определением представления и определением кластеризованного индекса.Кроме того, все операции над таблицей также поддерживают b-дерево индексированного представления: удаление в таблице удаляет строку из b-дерева индексированного представления, вставка в таблицу добавляет строку в b-дерево индексированного представления,update строки в таблице обновляет строку в b-дереве индексированного представления.Это обслуживание гарантирует, что условие в исходном определении представления продолжает выполняться: добавляются только строки, соответствующие условию WHERE read_time>..., обновление, изменяющее read_time до значения, которое больше не удовлетворяет условию, удаляет строку изb-дерево индексированного представления и т. д. и т. д. Все это обслуживание выполняется путем соответствующего изменения планов выполнения запросов для операций вставки / обновления / удаления для оценки предиката индексированного представления и выполнения соответствующей операции в b-дереве индексированного представления.В отличие от некоторых распространенных заблуждений, запрос представления никогда явно не переоценивается для обслуживания, все обслуживание выполняется построчно на основе оценки, поскольку строки вставляются / обновляются / удаляются.И именно поэтому некоторые агрегатные операции (например, MIN, MAX) не поддерживаются в индексированных представлениях.

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