1

我更改了一个用于包含 Lob 列 (VarBinary(MAX)) 的表。

当我跑

select * from sys.dm_db_partition_stats
where [object_id] = object_id('MyTable')

lob_used_pa​​ge_count 是 1014969。我以为它会是 0。我错了还是我需要做些什么?

4

2 回答 2

0

试试ALTER TABLE MyTable REBUILD

似乎从下面的测试中得到了诀窍。

CREATE TABLE LobTest
  (
     PK INT IDENTITY PRIMARY KEY CLUSTERED,
     A  CHAR(7000),
     B  VARCHAR(MAX)
  )

INSERT INTO LobTest
SELECT 'A', REPLICATE(CAST('A' AS VARCHAR(MAX)), 10000) UNION ALL
SELECT 'A', REPLICATE(CAST('A' AS VARCHAR(MAX)), 10000) UNION ALL
SELECT 'A', REPLICATE(CAST('A' AS VARCHAR(MAX)), 10000)

ALTER TABLE LobTest
  DROP COLUMN B

SELECT *
FROM   sys.dm_db_partition_stats
WHERE  [object_id] = object_id('LobTest')

ALTER TABLE LobTest REBUILD

SELECT *
FROM   sys.dm_db_partition_stats
WHERE  [object_id] = object_id('LobTest')

DROP TABLE LobTest 
于 2012-11-06T16:59:52.163 回答
0

重建聚集索引。当您在 SQL Server 中删除一列时,它实际上并没有被物理删除,直到重新生成聚集索引。

于 2012-11-06T17:31:09.307 回答