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