Приведет ли обновление какого-либо поля в базовой таблице к обновлению все строки в индексированных строках представления? - PullRequest
0 голосов
/ 01 октября 2019

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

Или, что еще хуже, все строкииндексированное представление будет переписано или будут обновлены только те строки, которые затронуты?

1 Ответ

1 голос
/ 01 октября 2019

Нет, он обновляется только тогда, когда это необходимо. Вот пример:

USE tempdb;
GO

DROP VIEW IF EXISTS dbo.TestValueOnly;
GO

DROP TABLE IF EXISTS dbo.Test;
GO

CREATE TABLE dbo.Test
(
    TestID int IDENTITY(1,1) NOT NULL 
        CONSTRAINT PK_dbo_Test PRIMARY KEY,
    TestName varchar(50) NOT NULL,
    ValueToChange int NOT NULL
);
GO

INSERT dbo.Test (TestName, ValueToChange)
VALUES ('Hello', 12),
       ('There', 14),
       ('And', 16),
       ('Again', 18);
GO

CREATE VIEW dbo.TestValueOnly
WITH SCHEMABINDING
AS
SELECT TestID, ValueToChange 
FROM dbo.Test;
GO

CREATE UNIQUE CLUSTERED INDEX CX_dbo_TestValueOnly
ON dbo.TestValueOnly (TestID);
GO

Теперь посмотрите на план запроса этих двух запросов:

UPDATE dbo.Test 
SET TestName = 'Changed' 
WHERE TestID = 14;

UPDATE dbo.Test 
SET ValueToChange = 17 
WHERE TestID = 14;

enter image description here

Первыйпросто обновляет базовую таблицу, как и ожидалось, и не касается индексированного представления. Второй также попадает в индексированное представление, как и ожидалось.

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