0
我在表上创建一个索引,我想包括覆盖柱:MessageText中为nvarchar(1024)SQL索引更新与覆盖柱
插入后,MessageText中是从来没有更新,所以这是一个理想的人选包括在一个覆盖索引中以加快查找速度。
但是,如果我更新同一索引中的其他列会发生什么?
索引中的整行是否需要重新分配,或者只更新索引中的更新列中的数据?
简单的例子
下表影像学检查:
CREATE TABLE [Messages](
[messageID] [int] IDENTITY(1,1) NOT NULL,
[mbrIDTo] [int] NOT NULL,
[isRead] [bit] NOT NULL,
[messageText] [nvarchar](1024) NOT NULL
)
与以下指标:
CREATE NONCLUSTERED INDEX [IX_messages] ON [Messages] ([mbrIDTo] ASC, [messageID] ASC)
INCLUDE ([isRead], [messageText])
当我们更新表:
UPDATE Messages
SET isRead = 1
WHERE (mbrIDTo = 6546)
查询计划显示索引IX_messages被利用并且也将被更新,因为isRead列是索引的一部分。
因此,在索引中包含大型文本字段(如上面的messageText)作为索引中的覆盖列的一部分,影响其他值在同一索引中的更新时的性能?
你有一个链接到MSDN文章指出,或其他一些可靠的消息来源? – gh9
非常感谢您提供丰富的链接! – gh9