テーブルの各レコードのサイズは、パフォーマンスパラメータです。つまり、レコードのサイズが小さければ、SQLServerは物理ハードからの読み取りごとにより多くのレコードをフェッチします。
ほとんどのクエリでは、テーブルのすべての列を使用するわけではなく、特定のクエリでのみ使用される列がある場合があります。各テーブルの列を分割してパフォーマンスを向上させることは可能ですか?
SQL Server2008R2を使用しています。
ありがとうございました。
テーブルの各レコードのサイズは、パフォーマンスパラメータです。つまり、レコードのサイズが小さければ、SQLServerは物理ハードからの読み取りごとにより多くのレコードをフェッチします。
ほとんどのクエリでは、テーブルのすべての列を使用するわけではなく、特定のクエリでのみ使用される列がある場合があります。各テーブルの列を分割してパフォーマンスを向上させることは可能ですか?
SQL Server2008R2を使用しています。
ありがとうございました。
真の列レベルのパーティション分割には、列指向のストレージが付属しています。「SQL Server 2012 列ストア インデックスの内部」を参照してください。ただし、これは SQL Server 2012 でのみ使用でき、一般的な SQL Server アプリではなく、特定の BI ワークロードに対応します。
行指向ストレージでは、垂直分割は実際には、適切なカバー インデックスを設計するための別の名前です。エンジンに別のナロー インデックスがある場合、可能であればベース テーブルの代わりにそれを使用します。
最後の代替手段であるテーブルを手動で連結し、クエリで垂直方向の「シャード」を結合する (または結合ビューを定義する、同じこと) ことは、通常はお勧めできず、ほとんど効果がありません。
現時点では、SQL Server 2008 では、テーブルを水平に分割することはできません。多数の列がある場合は、共通のキーを共有する水平チャンク テーブルに分割し、更新可能なビューでそれらをスキンして、1 つの非常に広いテーブルの錯覚を与える必要があります。
大きな列が数個しかない場合 (例: VARCHAR(1000)
)、データを正規化して一意の値のテーブルにすることができます。
列パーティション化なしのルールの 1 つの例外は、max (varchar(max) など) として宣言された文字列です。
これらは別のデータ ページに保存されます。列がクエリで参照されていない限り、このページは読み込まれないと思います。私が間違っていれば、より多くの知識のある人々が私を訂正してくれると確信しています。