2014-01-10 2 views
2

Я хочу знать, какой из этих двух предложений SQL лучше в производительности и лучшей практике, чтобы найти существующую запись? Есть ли еще один эффективный способ?Более быстрый способ проверки существующих записей в SQL Server

IF EXISTS(SELECT 1 FROM TABLE WHERE ID = @ID) 
BEGIN 
--VALIDATION 
END 

ИЛИ

SET @VARIABLE = SELECT COUNT(1) FROM TABLE WHERE ID = @ID) 
IF(@VARIABLE > 0) 
BEGIN 
--VALIDATION 
END 
+5

Используйте 'IF EXISTS'. Не заставляйте сервер рассчитывать, если вам всего лишь 0 или не 0. Для более эффективного способа нам, вероятно, нужно знать, что еще делает ваш запрос: мы можем переписать всю партию в один запрос, а не писать процедурно. –

+1

Вы должны попробовать их на большом столе и сравнить их. –

+0

Часть -VALIDATION - это только бит-переменная, возвращающая true или false. SET @ EXIST = 1. Это скалярнозначная функция –

ответ

6

Если все, что вам нужно знать, что есть какие-либо строки в целом, первый лучше - EXISTS завершит когда подзапрос находит первую найденную строку.

COUNT(1) должны найти все соответствующие записи для того, чтобы вернуть точное количество, которое затем в значительной степени игнорируется, если все, что хотел это >0

Кроме того (ИМХО) существует утверждение читает гораздо более четко (хотя второй оператор действительно не нуждается в переменной).

Update повторно комментарии

Пример экономии существует результат в переменной, чтобы прояснить некоторые замечания в отношении вопроса:

DECLARE @exists BIT 
SET @exists = (CASE 
        WHEN EXISTS(SELECT 1 FROM TABLE WHERE ID = @ID) THEN 1 
        ELSE 0 
       END) 

... 

IF @exists = 1 
BEGIN... 
Смежные вопросы