Dans notre application au niveau de la base de données, j'ai une table appelée "Factures dans la facturation du schéma" et "Billing_History".SQL Insert/Update/Delete Trigger Efficiency
Le déclencheur indiqué se trouve dans la table Acomptes du schéma de facturation. Cela se produit chaque fois qu'un enregistrement est inséré/mis à jour dans le schéma de facturation. Il est également écrit dans le fichier historique.
Si l'enregistrement est supprimé de la table de facturation, il est écrit dans la table d'historique avec un indicateur "Supprimé" = true.
Je pense que le « If Not exists (Select * from Inséré) est en train de tuer ma performance comme plus de disques sont ajoutés.
est-il un plus effecient était d'écrire ce déclencheur?
Create TRIGGER [Billing].[Installments_InsertDeleteUpdate_History]
ON [Billing].[Installments]
AFTER INSERT, DELETE, UPDATE
AS BEGIN
Insert Into Billing_History.Installments
Select *, GetDate(), 0 From Inserted
If Not Exists (Select * From Inserted)
Insert Into Billing_History.Installments
Select *, GetDate(), 1 From Deleted
SET NOCOUNT ON;
-- Insert statements for trigger here
FIN
Suggérez que vous ajoutiez un tag pour ce RDBMS que vous utilisez. – Smandoli
'Si non existant (Select * from Inserted)' ne détruira pas votre performance mais vous pouvez le remplacer par un contrôle 'IF @@ ROWCOUNT> 0' pour la même sémantique. –
Sélectionnez * dans une insertion est une pratique extrêmement pauvre. – HLGEM