Memasukkan ke dalam tabel sementara yang diindeks pada kolom gabungan dapat meningkatkan banyak hal saat inserted
dan deleted
tidak diindeks.
Anda dapat memeriksa @@ROWCOUNT
di dalam pemicu sehingga Anda hanya melakukan logika ini di atas beberapa ambang batas jumlah baris meskipun pada SQL Server 2008 ini mungkin melebih-lebihkan jumlah jika pemicu dipecat sebagai hasil dari MERGE
pernyataan (Ini akan mengembalikan jumlah total baris yang terpengaruh oleh semua MERGE
tindakan bukan hanya yang relevan dengan pemicu spesifik tersebut).
Dalam hal ini Anda bisa melakukan sesuatu seperti SELECT @NumRows = COUNT(*) FROM (SELECT TOP 10 * FROM INSERTED) T
untuk melihat apakah ambang batas terpenuhi.
Penambahan
Satu kemungkinan lain yang dapat Anda coba adalah dengan mengabaikan pemicu untuk pembaruan besar ini. Anda dapat menggunakan SET CONTEXT_INFO
untuk menetapkan bendera dan memeriksa nilai ini di dalam pemicu. Anda kemudian dapat menggunakan OUTPUT inserted.*, deleted.*
untuk mendapatkan nilai "sebelum" dan "setelah" untuk satu baris tanpa perlu JOIN
sama sekali.
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