質問は古く、100%正しい答えはないと思います。しかし、経験豊富なアドバイスを聞きたいです。大きな値のデータ型を別のテーブルに格納する必要がありますか?
SQL Server 2008 R2を使用しています。
私は何百万の行が格納されるテーブルを持っています。ほとんどの列は、varbinary(max)列のデータの説明(date、status、title、..)です。 XMLデータ型の2つの列もあります。これらの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"を設定する理由がわかります。
あなたのアドバイスは何ですか?他に何を考慮しなければならないのですか?
[それは、LOBを持っている場合は、オンラインでも再構築](http://rusanu.com/2011/08/05/online -index-operations-for-indexes-containing-lob-columns /) –
はい、2008 R2を使用しています。 [PSはあなたのブログでそれを見た:)] –