SQL Server 2008 R2 标准版数据库有一个没有索引、八列varchar(50)
一varchar(255)
列和 162,676 行的临时表。我希望这个表的大小不应该超过 100 MB,但它实际上超过了 7.5 GB。
什么会导致这种情况?我怀疑我可以通过添加聚簇索引或完全重新创建表来解决问题,但我想了解是怎么回事使一个临时表膨胀到如此荒谬的比例。到目前为止,这是我收集的相关数据:
sys.dm_db_index_physical_stats (DETAILED)
fragment_count = 1056
page_count = 964392
forwarded_record_count = 0
sp_spaceused @objname = 'db.schema.table',@updateusage = 'TRUE'
reserved = 7716888 KB
data = 7715136 KB
index_size = 24 KB
unused = 1728 KB
sys.allocation_units
total_pages = 964611
used_pages = 964395
data_pages = 964392
谁能告诉我为什么这张桌子占用这么多空间?
可能是大量数据已更新或删除,或者您调整了某些列的大小,或者您已截断/删除表并多次重新加载。在某些情况下,其中一些操作可能会导致未回收的空间。我会先试试这个:
接下来我会考虑添加一个聚集索引。
物理表布局可能与逻辑布局有很大不同。临时表尤其如此。有关更多详细信息,请参阅SQL Server 表列,包括将显示物理布局的查询: