列の順序は、SQL Server、Oracle、MySQLにまたがる、私が調整したいくつかのデータベースに大きなパフォーマンスの影響を与えました。この投稿には、経験則 があります。 :
- 最初に主キー列
- 次の外部キー列。
- 次によく検索される列
- 後で頻繁に更新される列
- NULL可能列は最後です。
- 最も頻繁に使用されるnull許容列の後に、最も使用されていないnull許容列
パフォーマンスの違いの例は、インデックスルックアップです。データベースエンジンは、インデックス内のいくつかの条件に基づいて行を検索し、行アドレスを取得します。ここで、SomeValueを探しているとしましょう。これは、次のテーブルにあります:
SomeId int,
SomeString varchar(100),
SomeValue int
SomeStringの長さが不明なため、エンジンはSomeValueの開始位置を推測する必要があります。ただし、順序を次のように変更した場合:
SomeId int,
SomeValue int,
SomeString varchar(100)
これで、エンジンは、行の開始から4バイト後にSomeValueが見つかることを認識します。したがって、列の順序はパフォーマンスにかなりの影響を与える可能性があります。
編集:SQL Server 2005は、行の先頭に固定長のフィールドを格納します。また、各行にはvarcharの開始への参照があります。これは私が上にリストした効果を完全に打ち消します。そのため、最近のデータベースでは、列の順序による影響はなくなりました。