Нет, он обновляется только тогда, когда это необходимо. Вот пример:
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;
Первыйпросто обновляет базовую таблицу, как и ожидалось, и не касается индексированного представления. Второй также попадает в индексированное представление, как и ожидалось.