首页 > 解决方案 > 更新索引视图的基础表,但视图中不存在该列

问题描述

假设我有两张表,Country 和 City。

Country(id, fname, president_name)
City(id, cname, country_id_fk, mayor_name)

City 表对外键依赖于 Country 表。假设我在这样的表上创建了一个索引视图:

CREATE VIEW CountryCity
WITH SCHEMABINDING
AS
    SELECT Country.fname, City.cname
    FROM Country INNER JOIN City
    ON Country.id = City.country_id_fk;
GO

并在该视图上创建一个唯一的聚集索引

CREATE UNIQUE CLUSTERED INDEX ucidx_cc
ON CountryCity(cname, fname);
GO

请注意,我没有president_name在视图中。如果我更新president_namein Country 表,是否会影响CountryCity视图。

我的意思是说影响是Country因为我们在该表上有一个索引视图,所以在更新表期间是否会出现性能问题?

标签: sqlsql-servertsqlviewindexed-view

解决方案


您基本上可以拥有包含特定列的索引。当您更新其他列时,如果它们未包含在索引中,则不会应用维护其数据的操作。

此外,SQL Engine 能够为每个表维护大量索引,因此无需担心如此简单的设计。


推荐阅读