web-dev-qa-db-ja.com

MySQL 5.5.8 InnoDB外部キー、JOINパフォーマンス

MySQL 5.5.8のaws/rdsを使用しています。すべてInnoDB。

パフォーマンス向上のため、いくつかのデータ要素をvarcharフィールドにマージしました。ミニサイズのintおよび日付タイプのフィールド。カバーするインデックスを追加しました。キー値ストアのように動作するように一部のテーブルを非正規化しました。ユーザーが生成した行などを含む共有テーブル.

また、アプリレイヤーでは同様の整合性チェックと防止が多数行われるため、大きなテーブル(2 + MM行)間の外部キー関係の可能性をいくつか排除することにより、挿入パフォーマンスをさらに改善することも検討しています。

私の質問は、A.F1側の主キーとB.F2側の単一行インデックスを使用して、2つのテーブルAとBの間の理論的な結合パフォーマンスについてです。 B.F2を外部キーとして(A.F1よりも)定義することもできるので、そのような結合が「より速く/より良く」などになるかどうか知りたいのですが。外部キー制約の有無にかかわらず-他のすべてのものは等しい(インデックス、他のフィールドなし、order-byなどなし)。

このような状況では、読み取りクエリが多くなり、外部キーの省略によってメリットが得られる挿入が少なくなることが予想されます。

4
SinR

外部キーの関係は、クエリのパフォーマンスではなく、データの整合性を確保することです。つまり、インデックスの目的です。また、InnoDBは外部キー関係を持つ各列にインデックスを作成することにも注意してください。

ただし、特に更新や削除の際にデータが常に有効であることを確認するために、外部キーの関係を用意することをお勧めします。これは、データのアーカイブを開始する必要があるときに重要になる場合があります。