【发布时间】:2012-03-19 09:48:51
【问题描述】:
问题很老,我想没有 100% 正确的答案。但想听听更有经验的建议。
使用 SQL Server 2008 R2。
我有一个表,其中将存储数百万行。大多数列是 varbinary(max) 列数据的描述(日期、状态、标题、..)。还有 2 列 XML 数据类型。这些 XML 很小,会经常被查询。所以:
MyTable
(
SomeID varchar(20)-- queried most often
Date DateTime -- queried most often
Status VarChar(10) -- queried most often
Title VarChar(50) -- queried most often
-- some more columns here
SomeSmallXML xml -- queried quite often
SomeOtherSmallXML xml -- queried quite often
MyData varbinary(max) -- queried rarely
MyOtherData varbinary(max) -- queried rarely
)
如果我将所有大值类型移动到其他表:
- 可以对聚集索引进行在线重新索引。 但是然后我必须将 xml 类型也移动到 其他表。由于他们经常被查询,它似乎并不 合理的。 (我预计会出现碎片化,因为 SomeID 列即将到来 从客户端应用程序。将其他代理键设置为是不合理的 聚集索引,因此 SomeID 将是聚集索引的键。)
- 可以将大数据移动到速度较慢的存储中。 但是猜测可以实现 表分区(慢文件组中的旧数据)+索引相同 快速存储。
在这种情况下,没有很好的理由将大值数据类型移动到其他表。 我确实看到了设置“sp_tableoption N'MyTable'、'large value types out of row'、'ON'”的理由。
你有什么建议?我还需要考虑什么?
【问题讨论】:
-
使用 SQL Server 2012 你可以做到online rebuild even if it has LOBs
-
是的,但我们使用的是 2008 R2。 [PS 在你的博客中看到了 :)]
标签: sql-server sql-server-2008 sql-server-2008-r2