4

varcharまたはvarbinary列を作成するときにmaxに大きな値を選択することの欠点は何ですか?

私はMSSQLを使用していますが、これは他のデータベースにも関連すると思います。

ありがとう

4

3 に答える 3

6

これは、特定の列に大量のデータを格納することが合理的かどうかによって異なります。

多くのデータを適切に格納できない列 (つまり、従業員の名前を VARCHAR(1000) として) を宣言すると、さまざまな問題が発生します。

  1. ほとんどではないにしても多くのクライアント API (つまり、ODBC ドライバー、JDBC ドライバーなど) は、特定の列の最大サイズを格納するのに十分な大きさのメモリ バッファーをクライアントに割り当てます。したがって、データベースが実際のデータを格納するだけでよい場合でも、クライアント アプリケーションが使用するメモリの量を大幅に増やすことができます。
  2. テーブル定義からデータ検証ルールを実行する (またはデータに関する情報を伝える) ことができなくなります。データベースで 1000 文字のファースト ネームが許可されている場合、データベースと対話するすべてのアプリケーションは、従業員名の長さに関する独自のルールを持つことになります。すべてのアプリケーションとテーブルの間にストアド プロシージャ レイヤーを配置してこれを軽減しないと、通常、さまざまなアプリケーションがさまざまなルールを持つことになります。
  3. マーフィーの法則では、1000 文字を許可すると、最終的に誰かが 1000 文字を列に格納するか、少なくとも 1 つ以上のアプリケーションでエラーを引き起こすのに十分な大きさの値を格納する (つまり、すべてのアプリケーションの従業員名フィールドが表示されるかどうかを確認する人は誰もいない) と述べています。 1000 文字)。
于 2009-01-23T23:34:36.080 に答える
4

RDBMS に依存します。IIRC、MySql は 255 文字を超える varchar に 2 バイトのオーバーヘッドを割り当てます (varchar の長さを追跡するため)。MSSQL <= 2000 では、8060 バイトを超える行サイズを割り当てることができますが、実際に 8060 バイトを超える行を INSERT または UPDATE しようとすると失敗します。SQL 2005[1] では挿入が許可されますが、オーバーフローのために新しいページが割り当てられ、ポインタが残されます。これは明らかにパフォーマンスに影響します。

[1] varchar(max) はやや特殊なケースですが、フィールドの長さが 8000 を超える場合、または行の長さが 8060 を超える場合にもオーバーフロー ページが割り当てられます。データ行オプションで。

于 2009-01-23T23:48:22.587 に答える
0

大規模なデータが何らかの形で (外部インターフェイスなどから) 入り、アプリがそれを処理するように設計されていない場合、アプリケーションが壊れるリスクが追加される可能性があります。

適切な設計として、常にフィールドのサイズを現実的な値に制限する必要があります。

于 2009-01-23T23:34:04.693 に答える