27

パフォーマンスと最適化の観点から:

  • SQL Serverでテーブルを作成する場合、列をどのような順序で配置するかは重要ですか?
  • 主キーが最初の列であるかどうかは重要ですか?
  • マルチフィールドインデックスを作成する場合、列が隣接しているかどうかは重要ですか?
  • ALTER TABLE構文を使用して、列を追加する位置を指定することはできますか?
    • そうでない場合、どうすれば列を別の位置に移動できますか?
4

6 に答える 6

9

SQL Server 2005 では、NULL 値を許容する可変長の列を配置すると、領域に影響を与えます。NULL 値を許容する可変長の列を定義の最後に配置すると、領域の消費を抑えることができます。

SQL Server 2008 では、この違いを無効にする "SPARSE" 列機能が追加されています。

ここを参照してください。

于 2008-08-29T17:52:40.703 に答える
3

私のMS-SQLの経験はSQL2000にまで及んでいますが、これらすべての質問に対する答えはNOだと思います。SQL2005では別の話かもしれません

于 2008-08-29T17:37:15.017 に答える
3

4番目の箇条書きの場合:いいえ、列を追加する場所を指定することはできません。ALTER TABLEの構文は次のとおりです:https ://msdn.microsoft.com/en-us/library/ms190273.aspx

MySQLでは、ALTER TABLE ADD ... AFTER ...を提供していますが、これはT-SQLには表示されません。

列を並べ替える場合は、テーブルを再構築する必要があります。

編集:最後の箇条書きについては、テーブルを削除して再作成し、列を並べ替える必要があります。SQLデータベースを操作するいくつかのグラフィカルツールはこれを行い、列を並べ替えているように見せるので、それを調べたいと思うかもしれません。

于 2008-08-29T17:40:47.207 に答える
1

インデックスはデータを保持し、最後の1回も保持しないため、最初の3つはいいえ

于 2008-08-29T17:38:42.423 に答える
-3

最初の箇条書き:

はい、少なくとも非推奨の BLOB 、、またはを使用し、SQL Server <= 2005 を使用している場合、列の順序は重要です。imagetextntext

そのような場合、それらの列をテーブルの「最後」に配置する必要があり、列を取得するたびにパフォーマンスが低下します。

DAL を使用してそのようなテーブルからデータを取得する場合、これは遅延読み込みパターンに最適な場所です。

于 2010-04-28T20:18:29.423 に答える