1. ホーム
  2. mysql

[解決済み] テーブルの列の順番を気にする理由はあるのでしょうか?

2023-03-14 10:38:53

質問

MySQL で FIRST と AFTER を使用してカラムの順序を変更できることは知っていますが、なぜそんなことをする必要があるのでしょうか?優れたクエリはデータを挿入する際に明示的に列に名前を付けるので、テーブル内の列の順序を気にする理由は本当にあるのでしょうか?

どのように解決するのですか?

列の順序は、Sql Server、Oracle、および MySQL にまたがる、私がチューニングしたいくつかのデータベースでパフォーマンスに大きな影響を及ぼしていました。 この投稿では 良い経験則があります。 :

  • 最初に主キーカラム
  • 外部キーカラムが次
  • よく検索されるカラムは次へ
  • 頻繁に更新されるカラムは後で
  • Null可能なカラムは最後に
  • より頻繁に使用されるヌル可能なカラムの後に、最も使用されないヌル可能なカラムがある

パフォーマンスの違いの例として、インデックス検索があります。 データベースエンジンは、インデックス内のいくつかの条件に基づいて行を検索し、行のアドレスを取得します。 ここで、SomeValue を探していて、それがこのテーブルにあるとします。

 SomeId int,
 SomeString varchar(100),
 SomeValue int

SomeStringは長さが不明なので、エンジンはSomeValueがどこで始まるかを推測しなければなりません。 しかし、順序を変更すると

 SomeId int,
 SomeValue int,
 SomeString varchar(100)

これでエンジンは、SomeValueが行の先頭から4バイト後に見つかることを知りました。そのため、列の順序はパフォーマンスにかなりの影響を与える可能性があります。

EDIT: Sql Server 2005 は、行の先頭に固定長のフィールドを格納します。そして、各行は varchar の開始点への参照を持っています。 これは、私が上に挙げた効果を完全に否定するものです。そのため、最近のデータベースでは、列の順序はもはや何の影響も及ぼしません。