webForumDet fria alternativet

Vad bör vara mer fördelmässigt ur prestanda synvinkel

Databaser & SQL

5 svar · 686 visningar · startad av Fredde Mannen

Medlem sedan nov. 20014 054 inlägg
Frågan#1

Som rubriken lyder, vad bör vara mer fördelmässigt ur prestanda synvinkel, detta gäller för Ms SQL Server 2008.

Vi börjar med variant 1:

INSERT INTO TABELL1(Col1,Col2,Time) VALUES('Value1','Value2', GETDATE())
DELETE FROM TABELL1 WHERE Col1 = 'Value1' AND Time < GETDATE()

eller:

IF (SELECT COUNT(Col1) FROM TABELL1 WHERE Col1 = 'Value1') = 0
 BEGIN
   INSERT INTO TABELL1(Col1,Col2,Time) VALUES('Value1','Value2', 
GETDATE())
 END
ELSE
 BEGIN
    UPDATE TABELL1 Set Col2='Value2', Time=GETDATE() WHERE Col1 = 'Value1'
 END

Dvs om raden finns uppdatera värden i raden annars lägg in en rad.

Medlem sedan feb. 20013 023 inlägg
#2

Enligt Microsoft ska man först köra en update, blir noll rader uppdaterade kör man en insert. Jag vågar dock inte lova att det är snabbast i alla lägen att göra så.

Medlem sedan aug. 20039 340 inlägg
#3

För övrigt, borde inte effekten av exempel 1 kunna bli att klockan rör sig lite mellan kommandona och att båda raderna (om det finns existerande rader) raderas?

Medlem sedan nov. 20014 054 inlägg
#4

clarkbones skrev:

Enligt Microsoft ska man först köra en update, blir noll rader uppdaterade kör man en insert. Jag vågar dock inte lova att det är snabbast i alla lägen att göra så.

typ:


UPDATE .... 

IF @@ROWCOUNT = 0
 BEGIN
   INSERT .... 
 END
Medlem sedan nov. 20014 054 inlägg
#5

nitro2k01 skrev:

För övrigt, borde inte effekten av exempel 1 kunna bli att klockan rör sig lite mellan kommandona och att båda raderna (om det finns existerande rader) raderas?

jo, var lite slö skrivandet ...

declare  @currentTime = GETDATE()

ersätt GETDATE med @currentTime ..

Medlem sedan feb. 20013 023 inlägg
#6

Fredde Mannen skrev:

typ:


UPDATE .... 

IF @@ROWCOUNT = 0
 BEGIN
   INSERT .... 
 END

Yep!

281 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
119 ms — deklarationer (db)
0 ms — hämta statistik (cache)
132 ms — hämta tråd, inlägg och bilagor (db)
146 ms — ändringar (db)