sqlserver 堆表資料刪除 修改及空間重用

2021-09-23 23:56:14 字數 551 閱讀 4463

被刪記錄所在資料頁中對應的偏移量會被重置為0

被刪記錄所在資料頁頁頭中記錄空閒空間大小會相應增加(m_freecnt,用dbcc page命令看),但資料頁中空閒空間不會合併

pfs資料頁中對應被刪記錄的資料頁空間使用率資料一般會變化

對應此堆表的iam、gam、sgam資料頁內容不變

新加記錄會優先占用資料頁中現有空閒空間(現有空閒空間是指m_freedata之後的空間,類似oracle高水位線以上的空間)

如果現有空閒空間不夠插入一行記錄,而包括被刪記錄所佔空間則可以容納新記錄時,資料頁中資料會重新組織排列,被刪記錄所佔空間會與現有空閒空間合併,新加記錄將儲存到合併後的空閒空間中。如果合併後還是不夠,sqlserver會將新記錄插入另乙個有足夠空間的資料頁中,而不重新組織改資料頁空閒空間

與delete非常像(類似delete後再insert)

若被update後記錄未變長:更新後記錄存在原位置

若被update後記錄變長:

參考:《sqlserver 2008資料庫技術內幕》

SQL Server刪除表及刪除表中資料的方法

sql server中如何刪除表,如何刪除表中的資料。刪除表的t sql語句為 drop table 表名 drop是丟棄的意思,drop table表示將乙個表徹底刪除掉。刪除表資料有兩種方法 delete和truncate。delete的用法如下 delete from 表名 where條件 t...

SQL Server刪除表及刪除表中資料的方法

刪除表的t sql語句為 drop table 表名 drop是丟棄的意思,drop table表示將乙個表徹底刪除掉。刪除表資料有兩種方法 delete和truncate。delete的用法如下 delete from 表名 where條件 truncate的用法如下 truncate table...

Sql Server 刪除所有表

如果由於外來鍵約束刪除table失敗,則先刪除所有約束 第1步 刪除所有表的外來鍵約束 declarec1cursorfor select alter table object name parent obj drop constraint name fromsysobjects wherextyp...