Sql server 在索引视图的基础表上插入失败

Sql server 在索引视图的基础表上插入失败,sql-server,indexing,view,Sql Server,Indexing,View,我读过SQL Server中索引视图的缺陷,但我不明白解决方法是什么。本文中显示锁争用的用例似乎是索引视图的合理/有用的应用 是否有任何方法可以像本文中所描述的那样使用索引视图,而不会遇到所提出的问题 编辑(从链接复制的重要零件): 索引视图可能会增加锁争用 这很容易演示。创建下表: CREATE TABLE dbo.ChildTable(ChildID INT NOT NULL CONSTRAINT PK_ChildTable PRIMARY KEY, ParentID INT NO

我读过SQL Server中索引视图的缺陷,但我不明白解决方法是什么。本文中显示锁争用的用例似乎是索引视图的合理/有用的应用

是否有任何方法可以像本文中所描述的那样使用索引视图,而不会遇到所提出的问题

编辑(从链接复制的重要零件):

索引视图可能会增加锁争用

这很容易演示。创建下表:

CREATE TABLE dbo.ChildTable(ChildID INT NOT NULL 
  CONSTRAINT PK_ChildTable PRIMARY KEY,
  ParentID INT NOT NULL,
  Amount INT NOT NULL);
GO   
从SSMS中的一个选项卡运行以下脚本:

begintran;
插入dbo.ChildTable(ChildID、ParentID、Amount)
数值(1,1,1);

从另一个选项卡运行类似的选项卡:

BEGIN TRAN;
INSERT INTO dbo.ChildTable(ChildID, ParentID, Amount)
VALUES(2,1,1);
ROLLBACK;
请注意,两个插入都已完成,它们不会相互阻塞。在两个选项卡中回滚,并创建索引视图:

CREATE VIEW dbo.ChildTableTotals WITH SCHEMABINDING
AS
SELECT ParentID, 
COUNT_BIG(*) AS ChildRowsPerParent, 
SUM(Amount) AS SumAmount
FROM dbo.ChildTable
GROUP BY ParentID;
GO
CREATE UNIQUE CLUSTERED INDEX ChildTableTotals_CI 
ON dbo.ChildTableTotals(ParentID);

重新运行两个插入。请注意,第二个不完整;它被封锁了。原因很简单:第一次插入会修改索引视图中的相应条目,因此插入会获取并锁定该条目。

您应该回答问题并引用相关段落(不要只转储整个内容!)这是一篇非常老的文章(超过10年了),从那时起,SQL Server发生了重大变化;包括基数估计。该文章发布时发布的所有版本都不再受支持(根本不受支持)。我不能说那篇文章所说的还不是真的,但我肯定不会在这么多年后从表面上看它。就我个人而言,我会尝试在现代沙盒服务器中复制文章中描述的问题,看看它是否仍然是一个问题。感谢各位,我编辑了文章的重要部分,并且我能够用MSSQL 2016重新创建问题