web-dev-qa-db-ja.com

TRIGGERはパフォーマンスを向上させますか?

TRIGGERsは後続のクエリを処理するので便利ですが、パフォーマンスの観点からも利点がありますか?

2つまたは3つのクエリを

INSERT INTO table1 ...
UPDATE table2 ...
UPDATE table3 ...

トリガーベースのクエリとして

INSERT INTO table 1

トリガー付き

CREATE TRIGGER test
AFTER INSERT ON table1
FOR EACH ROW BEGIN
UPDATE table2 ... WHERE id=NEW.id;
UPDATE table3 ... WHERE id=NEW.id;
END
  1. 同じ3つのクエリでパフォーマンスは同じですか?つまり、後続のクエリを実行するか、TRIGGERが実行するかは重要ですか?

  2. APIを使用するとどうなるでしょうか(PHPを介してクエリを実行するなど)。後続のクエリは内部であり、コネクタ/ドライバは必要ありません。 TRIGGERはパフォーマンスを向上させますか?

追加情報:データベースはinnoDBを備えたmysql 5.5です。

5
Googlebot

Table1、table2、table3もInnoDBテーブルであると想定しています。

自動コミットのため、すべての挿入/更新がディスクに書き込まれるため(データ/インデックスツリーの更新)、処理が遅くなり、BEGIN TRANSACTIONおよびCOMMITを使用して高速化することはできません。

Table1、table2、table3がInnoDBではなく、MyISAM(テーブルロック)またはメモリ(テーブルロック)である場合、これにより不要なテーブルロック "機能"が発生し、速度が低下します。

編集により、トリガーコードの背後にあるソースコードの非常に小さな部分のみが分析されるため、トリガーの背後にあるソースコードをより徹底的に分析して、パフォーマンスに影響があるかどうか、およびこれが相対的なパフォーマンスに与える影響を確認します持っています。

3
Raymond Nijland

トリガーを使用しても、実行速度に大きな影響はありません。最終的に、データベースシステムは同じ操作を実行しています。

しかし、すべての挿入が更新を義務付けていると確信している場合、トリガーはデータベースの整合性を確保するための優れた方法なので、必ずそれを行ってください。

4
Twinkles