[解決済み] テーブルの列の順番を気にする理由はあるのでしょうか?
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 の開始点への参照を持っています。 これは、私が上に挙げた効果を完全に否定するものです。そのため、最近のデータベースでは、列の順序はもはや何の影響も及ぼしません。
関連
-
MySQLのNULLについて解説した記事
-
[解決済み】DynamoDB : 提供されたキー要素がスキーマと一致しません。
-
[解決済み] INNER JOINよりもCROSS APPLYを使用すべきなのはどのような場合ですか?
-
[解決済み] 最初の行への結合方法
-
[解決済み] MySql でクエリ実行時に only_full_group_by に関連するエラーが発生する。
-
[解決済み】SQL Serverで既存のテーブルにデフォルト値を持つカラムを追加する
-
[解決済み】Oracleクエリが順序付け後に返す行数を制限するにはどうすればいいですか?
-
[解決済み】MySQLのテーブルを2つのカラムで順番に並べる
-
[解決済み】MySQLで正規表現による置換を行うには?
-
[解決済み】WHEREとHAVINGの比較
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
MySQLデータベース・インデックスの左端一致の原則
-
MySQLのLike演算子に関する詳細
-
MySQLとOracleの一括挿入SQLの汎用的な記述例
-
mysqlのデータ圧縮性能比較 詳細
-
MySQLの悲観的ロックと楽観的ロックの実装スキーム
-
Mysqlデータベースへのリンク時にpymysqlがConnection refusedエラーを報告する
-
MySQLの起動エラー:ERROR 2003 (HY000)。localhost'上のMySQLサーバーに接続できない(10061)
-
[解決済み] KEYキーワードは何を意味するのか?
-
[解決済み] MySQLデータベースの名前を素早く変更する(スキーマ名を変更する)方法は?
-
[解決済み】MySQLのテーブルでカラムを移動する方法は?