我似乎记得,当表中的行更新时,SQL Server首先删除该行,然后重新添加该行,如果存在此列,则具有相同的列标识值。谁能证实这一点?
答案 0 :(得分:10)
假。在大多数情况下,数据在同一页面内就地更改。使用SQL Server 2008,您实际上可以询问数据驻留在磁盘上的位置,这将显示多少。
现在实际看了它,我把它全部拿回来了:
http://www.sqlskills.com/BLOGS/PAUL/category/On-Disk-Structures.aspx
这可以在SQL Server 2008上轻松测试。(从链接文章修改的代码)
CREATE TABLE test (c1 INT, c2 VARCHAR (2000));
GO
CREATE CLUSTERED INDEX test_cl ON test (c1);
GO
CHECKPOINT;
GO
INSERT INTO test VALUES (1, REPLICATE ('Paul', 500));
GO
CHECKPOINT;
select %%physloc%%, * from test -- 0x3E01000001000000
GO
UPDATE test SET c1 = 2 WHERE c1 =1;
GO
select %%physloc%%, * from test -- 0x3E01000001000100
^
|
notice it has changed location