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.

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top