3

私の非常に前の会社の 1 つで、テキスト型の列に長い説明を格納する別のテーブルを使用していました。これは、テキスト タイプに伴う制限のために行われたと思います。

現在取り組んでいる既存のアプリケーションのテーブルを設計していますが、この質問が頭に浮かびます。アイテムの長い説明を varchar(max) 列の同じアイテム テーブルに格納することに共鳴しています。この列のインデックスを作成できないことは理解していますが、これらの列で検索を行うことはないので問題ありません。

これまでのところ、この列を別のテーブルに分離する理由はわかりません。

何か不足している場合、または varchar(max) の同じテーブルに説明を保存するのが良い方法である場合は、入力してください。ありがとう!

4

2 に答える 2

6

フィールドが属するテーブルにフィールドを保持します。SQL Server 2005 以降、エンジンは、大きなデータ型や可変長の短いデータ型に関して、よりスマートになりました。古い TEXT、NTEXT、および IMAGE タイプは非推奨です。MAX の長さの新しいタイプはそれらの代替品です。SQL 2005 では、各パーティションには 3 種類の基になるアロケーション ユニットがあります。1 つは行用、1 つは LOB 用、もう 1 つは行オーバーフロー用です。MAX 型は LOB アロケーション ユニットに格納されるため、実質的に、エンジンは大きなオブジェクトを格納するための別のテーブルを管理します。行オーバーフロー ユニットは、更新後にページに収まらなくなる行内可変長データ用であるため、別のユニットに「オーバーフロー」されます。

テーブルとインデックスの編成を参照してください。

于 2009-09-11T17:12:40.897 に答える
1

使用頻度にもよりますが、はい、別のテーブルに置くことをお勧めします。決定を下す前に、SQL ファイルのページング、ページ分割、および SQL がデータを格納する "方法" の詳細を確認する必要があります。

簡単に言えば、varcharmax() は間違いなくパフォーマンスの低下を引き起こす可能性があり、コストのかかる操作であるページ分割の増加により、これらのフィールドの長さが大幅に変化する可能性があります。

于 2009-09-11T16:47:34.230 に答える