问题很老,我猜没有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
)
如果我将所有大值类型移动到其他表:
在这种情况下,没有很好的理由将大值数据类型移动到其他表。 我确实看到有理由设置“sp_tableoption N'MyTable”,“大值类型超出行”,“开启”。
你有什么建议?我还需要考虑什么?
答案 0 :(得分:1)
我根据与其他同事的讨论做出了决定:在其他表中的分离数据中分离了一些LOB数据(也包括SomeID和Date列)。
最重要的是:我错过了考虑列的更新率以及经常查询数据的时间长度以及当它们变得过长而不是很有趣时绝大多数(但是不是所有的情况。
这就是这种情况的不同之处。
所以提出来了:
MyTable
(
SomeID varchar(20)-- queried most often / Updated never
Date DateTime -- queried most often / Updated never
Status VarChar(10) -- queried most often / Updated few times after insert
Title VarChar(50) -- queried most often / Updated never
-- some more columns here
SomeSmallXML xml -- queried quite often / Updated few times after insert
SomeOtherSmallXML xml -- queried quite often / Updated never
MyData varbinary(max) -- queried rarely / Updated never
MyOtherData varbinary(max) -- queried rarely / Updated 1 shortly after insert
)
因此,可以看出,一些LOB数据 - MyData和MyOtherData varbinary(max)在短时间后变为静态。它们足够大,所以我想将它们存储在cheep磁盘上,并在某些时候放在只读分区上。最近的日期是Date,因为我经常需要“MyData”或“MyOtherData”。
所以最终设计看起来大致如下:
MyTable
(
SomeID varchar(20)
Date DateTime
Status VarChar(10)
Title VarChar(50)
-- some more columns here
SomeSmallXML xml
SomeOtherSmallXML xml
)
MyTableLOB
(
SomeID varchar(20)
Date DateTime -- used for partitioning
MyData varbinary(max)
MyOtherData varbinary(max)
)