问题是旧的,我想没有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','超出行数的大值类型','ON'”的理由。
您的建议是什么?我还有什么需要考虑的?
随着SQL Server 2012中,你可以做[在线重建即使它的LOB(http://rusanu.com/2011/08/05/online -index-operations-for-indexes-containing-lob-columns /) – 2012-03-19 14:38:07
是的,但我们使用的是2008 R2。 [PS在你的博客中看到了:)] – 2012-03-19 14:42:54