0

私は、データベースとしてMySQLを使用するかなり古いWebアプリを使用しています。テーブルの90%はMyISAMであり、ほとんどの場合、外部キーにインデックスがありません。

外部キー制約などを適用できるように、すべてをInnoDBに移植することを検討していました。ただし、アプリケーションは古く、少し乱雑であるため、参照整合性を適用するためにコードに依存しており、データベースでこの変更を行うと、複数のコードエラーが発生する可能性があります。コードベース全体を調べて、すべてが想定どおりに機能することを確認する時間がありません。予期しない原因となる外部キー制約を追加する可能性を認識しているだけではないことを疑う理由はありません。問題。

別のアプローチは、制約を作成せずに外部キーフィールドにインデックスを追加することであると考えていました。これにより、既存の機能を損なうことなくパフォーマンスが向上すると思います。これをしない理由があるかどうか誰かに教えてもらえますか?これを行うと、インデックスと外部キー制約を追加するのと同じパフォーマンスの向上が得られますか?

4

1 に答える 1

1

はい、インデックスを追加するだけで、ほぼ同じパフォーマンスが向上します。外部キーの制約は、パフォーマンスよりも参照整合性のためのものです。

これらの制約を追加すると、DBエンジンがより効率的な実行プランを構築するのに役立つ場合があります。ただし、インデックスのないデータベースにターゲットを絞ったインデックスを追加する利点と比較すると、これは小さな考慮事項です。

于 2012-06-22T17:46:31.383 に答える