views:

88

answers:

1
+2  Q: 

MERGE -v- UPSERT

Hi,

I have an application I’m writing in access with a SQL server backend. One of the most heavily used parts is where the users selects an answer to a question, a stored procedure is then fired which sees if an answer has already been given, if it has an UPDATE is executed, if not an INSERT is executed.

This works just fine but now we have upgraded to SQL server 2008 express I was wondering if it would be better/quicker/more efficient to rewrite this SP to use the new MERGE command.

Does anyone have any idea if this is faster than doing a SELECT followed by either an INSERT or UPDATE?

A: 

Not worth the effort. Possibly doable, but it will not give you anything noticable.

MERGE is especially targeting data warehouses where finding out what to insert/update is the tricky part. It allows all operations (insert, update) to be done with ONE set of merges, compared to one for each condition. This makes no real difference in your case.

I have one database where I am uploading 3-5 million rows into a 300 million row table - there merge improoves my performance by 50% (one table scan instead of two).

TomTom
It’s a fair point and while I’m not chomping at the bit to do it I think if it does offer increased performance as you said then it might feature in an episode of “micro optimisation theatre” if I get some slack time in the project and need to look busy
Kevin Ross