Tengo un SP en SQL Server que se ejecuta cientos de veces por minuto y necesita verificar el tráfico entrante en una base de datos. Por el momento se hace lo siguiente¿Qué es más rápido, EXISTE antes o después del INSERT?
INSERT INTO table
SELECT @value1,@value2 WHERE NOT EXISTS
(SELECT * FROM table WHERE value1 = @value1 AND value2 = @value2);
Sin embargo, yo también podría ir con
IF NOT EXISTS(SELECT * FROM table WHERE value1 = @value1 AND value2 = @value2)
INSERT INTO table (value1,value2) VALUES (@value1,@value2);
Lo que sería más rápido? Me da la sensación de que no hay mucha diferencia entre ellos, pero históricamente no soy muy bueno en TSQL ... =/
ACTUALIZACIÓN: Whoops ... significa que el EXISTS usa más de 1 valor para encontrar si un existe registro, por lo que una restricción única no funcionará. Editó la muestra para reflejar que ...
http://stackoverflow.com/questions/2276023/t-sql-insert-or-update –
@carlos: Esa es realmente una pregunta diferente, aunque algo relacionada. –
Su segunda opción simplemente no es segura. Un 'INSERT' concurrente puede ocurrir entre las instrucciones 'IF' y' INSERT'. – Quassnoi