Qual è il preferito metodo merge per SQL Server 2005?
-
22-09-2019 - |
Domanda
Mi sono stati principalmente tramite il Esiste Un Metodo per la fusione di una riga in una tabella, ma sto pensando di passare al Riga Metodo Di Conteggio.C'è qualche motivo per non?
Esiste Un Metodo
If Exists(Select * From Table Where ID = @ID) Begin
Update Table Set Value = @Value Where ID = @ID
End Else Begin
Insert Into Table (Value) Values (@Value);
End
Riga Metodo Di Conteggio
Update Table Set Value = @Value Where ID = @ID
If (@@RowCount = 0) Begin
Insert Into Table (Value) Values (@Value);
End
Prestazioni
Il Riga Metodo Di Conteggio sembra essere notevolmente più veloci.Su un tavolo con circa 50k righe orologi in a 1/5 del tempo di Esiste Un Metodo.I test sono stati non troppo scientifico, ma anche con un conservatore +/- 15%, che è notevole.Questo è il principale motivo per cui voglio passare.
NOTA
Gli esempi sono volutamente semplice per migliorare la leggibilità.Essi non riflettono in alcun modo la mia situazione attuale.
Soluzione
Non vedo nessun problema particolare.Si dovrebbe cercare uno che è più performante, anche se (anche se penso che sia irrilevante in questo esempio).Ma come Cade sottolineato, l'utilizzo di una transazione.
Si noti, inoltre, che per SQL Server 2008, è possibile utilizzare l'istruzione MERGE (solo nel caso in cui avete intenzione di aggiornamento).
Altri suggerimenti
In ogni modo, potrebbe essere necessario avvolgere in una transazione.
Il più grande motivo per non passare è che quello che hai ora è al lavoro e apportando una modifica introduce la possibilità di nuovi bug in modo strisciante.Se si desidera modificare, come si aggiornano le altre cose, OK, ma quali sono veramente andando a guadagno dal cambiamento?Ho il sospetto che il guadagno di prestazioni, se qualsiasi, probabile essere molto piccoli, come gli esempi che sono mi sembrano uso singolo record.