sql >> データベース >  >> RDS >> Sqlserver

挿入/削除されたトリガー テーブルでのスロー ジョイン

    結合列にインデックスが付けられた一時テーブルに挿入すると、 inserted として物事が改善される可能性があります そして削除 索引付けされていません。

    @@ROWCOUNT を確認できます トリガー内でこのロジックを実行するため、行数のしきい値を超えてのみこのロジックを実行します。 ステートメント (すべての MERGE によって影響を受ける行の総数を返します その特定のトリガーに関連するアクションだけではありません)。

    その場合、次のようなことができます SELECT @NumRows =COUNT(*) FROM (SELECT TOP 10 * FROM INSERTED) T しきい値が満たされているかどうかを確認します。

    追加

    実験できるもう 1 つの可能性は、これらの大規模な更新のトリガーを単純にバイパスすることです。 SET CONTEXT_INFO を使用できます フラグを設定し、トリガー内の this の値を確認します。 OUTPUT insert.*, deleted.* を使用できます。 JOIN を必要とせずに行の「前」と「後」の値を取得する

    DECLARE @TriggerFlag varbinary(128)
    SET @TriggerFlag = CAST('Disabled' AS varbinary(128)) 
    
    SET CONTEXT_INFO @TriggerFlag
    
    UPDATE YourTable
    SET Bar = 'X'
    OUTPUT inserted.*, deleted.* INTO @T
    
    /*Reset the flag*/
    SET CONTEXT_INFO 0x
    



    1. TRUE/FALSEマーキングを使用したPostgresqlでのピボット

    2. Rails、MySQL、Snow Leopard

    3. MySQLマルチ削除。参照された行を複数削除することは可能ですか?

    4. JetShowPlan:入門書