sql >> Database >  >> RDS >> Sqlserver

Trage join op ingevoegde/verwijderde triggertabellen

Invoegen in tijdelijke tabellen die zijn geïndexeerd op de samenvoegende kolommen kan de zaken verbeteren zoals inserted en deleted zijn niet geïndexeerd.

U kunt @@ROWCOUNT . controleren binnen de trigger, zodat u deze logica alleen boven een bepaald drempelaantal rijen uitvoert, hoewel dit op SQL Server 2008 het aantal enigszins kan overdrijven als de trigger is geactiveerd als gevolg van een MERGE statement (Het retourneert het totale aantal rijen beïnvloed door alle MERGE acties die niet alleen relevant zijn voor die specifieke trigger).

In dat geval kun je gewoon iets doen als SELECT @NumRows = COUNT(*) FROM (SELECT TOP 10 * FROM INSERTED) T om te zien of de drempel is bereikt.

Toevoeging

Een andere mogelijkheid waarmee u kunt experimenteren, is simpelweg de trigger voor deze grote updates omzeilen. Je zou SET CONTEXT_INFO . kunnen gebruiken om een ​​vlag in te stellen en de waarde hiervan in de trigger te controleren. U kunt dan OUTPUT inserted.*, deleted.* om de "before" en "after" waarden voor een rij te krijgen zonder JOIN te hoeven gebruiken helemaal niet.

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. Meerdere MYSQL-query's versus meerdere php foreach-lussen

  2. Hoe Android veilig te verbinden met mysql-database

  3. Een afzonderlijke PHP-array in Javascript ontleden

  4. Blob-afbeelding weergeven in html met angularjs