タイムスタンプを使用して実際のデータ変更を検出する MySQL トリガーの最適化
課題:
MySQL の「AFTER UPDATE」トリガーは、実際のデータが変更されていなくても起動され、不必要な実行やパフォーマンスのボトルネックにつながります。
解決策:
タイムスタンプを使用すると、効率的なソリューションが得られます。 MySQL の TIMESTAMP
データ型は、行が変更されるたびに現在時刻で自動的に更新されます。 トリガー内で NEW
と OLD
のタイムスタンプ値を比較することで、本物のデータ変更を正確に識別できます。
例のコード:
このトリガーはタイムスタンプを利用して、実際のデータ変更時にのみ実行されます:
<code class="language-sql">CREATE TRIGGER ins_sum AFTER UPDATE ON foo FOR EACH ROW BEGIN IF NEW.ts != OLD.ts THEN INSERT INTO bar (a, b) VALUES(NEW.a, NEW.b); END IF; END;</code>
メカニズム:
NEW
: 更新された行の新しい値を表します。OLD
: 更新前の行の値を表します。NEW.ts != OLD.ts
: この比較により、タイムスタンプが異なる場合にのみトリガーがアクティブになり、実際のデータ変更が示されます。利点:
重要な考慮事項:
TIMESTAMP
のみ 列が更新されることを前提としています。 タイムスタンプを個別に変更できる場合、このアプローチは信頼できない可能性があります。
以上が実際のデータ変更のみを検出するようにタイムスタンプで MySQL トリガーを最適化するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。