赞
踩
在SQL Server中,为了加快数据的删除与数据删除后的回滚操作,对含有索引的表引入了数据的逻辑删除,即数据先被标记为删除,再进行物理删除。这些被标记删除,而还未执行物理删除的记录行,则被称为虚影行,即ghost record(又被称为ghost row)
Row in the leaf level of an index that has been marked for deletion, but has not yet been deleted by the database engine.
下图所示是SSMS中某个表虚影行的信息,
索引属性->碎片选项->虚影行数:
实际上SQL Server的虚影行由后台线程:ghost_cleanup自主维护。
为了更清晰的理解上述内容,我们做如下演示:创建一张含聚集索引的表并插入5000条记录,然后通过trace flags禁用后台线程ghost_cleanup,再删除表中所有记录后,最终观察记录行数的变化及影响。
首先,我们创建一个测试数据库mydb
USE master
GO
--创建一个测试数据库
CREATE DATABASE mydb;
GO
然后在这个库中,创建一张含有5000条记录的聚集索引表ghosttest:
--创建一个测试表ghosttest
CREATE TABLE ghosttest(
id int identity(1,1) NOT
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。