web-dev-qa-db-ja.com

1M行テーブルに外部キーを追加することによるパフォーマンスへの影響

MariaDB + InnoDBを実行するeコマースデータベースがあり、トランザクションを格納するテーブル(T)と、相場(Q)を格納するテーブルがあります。

Qを参照するTに外部キーを追加して、TとQを接続したいのですが。

Qに100万行(絶えず増加)とTが約100kあることを考えると、テーブルTに外部キーをQに追加すると、パフォーマンスに大きな影響が出ると思いますか毎日の操作中に?代わりの方法は、外部キーのない単純なINT列を追加することです。または何か他のもの、私は提案を受け入れる:)

詳細については:

  • Tには約20行があり、主に(SHORT)INTEGER、いくつかの他の外部キー、およびいくつかのDateTimeフィールドがあります。
  • Qには2つのSHORTINTフィールドと2つのVARCHARフィールド(それぞれ255b)があります。

あなたの洞察を事前に感謝します。

4
driscan

データで保証されている場合は、外部キー(FK)制約を維持する方がはるかに適切です。

MySQLは自動的にインデックスを作成します-FKは一意のキーを参照する必要があります(明らかに、PRIMARY KEY(PK)にすることができます- here から)。

データベースにデータ制約を適用することが[〜#〜]とても[〜#〜]良い理由については、多くの理由について こちら を参照してください考え。 Tテーブルのインデックスは、挿入の小さなヒットを犠牲にして検索速度を向上させます。

私を信じて、あなたは自分でこれをやろうとするよりも、データベース機能を利用することであなた自身に莫大な悲しみを救うでしょう。

5
Vérace

それはそれがどのように機能するかではありません。最初に正しく実行してから、最適化してください。

外部キーが必要な場合は、外部キーを使用してください。

次に、パフォーマンスを測定します。ホットスポットを見つけます。それらを最適化します。外部キーがパフォーマンスの大きなドラッグ(疑わしい)である場合は、削除してください。

また、「不正なデータがあるとどうなりますか?」

2
Neil McGuigan