제목에서 알 수 있듯이 ... 레코드가 테이블에 있는지 여부를 결정하기 위해 가장 적은 오버 헤드로 가장 빠른 방법을 찾으려고합니다.
샘플 쿼리 :
SELECT COUNT(*) FROM products WHERE products.id = ?;
vs
SELECT COUNT(products.id) FROM products WHERE products.id = ?;
vs
SELECT products.id FROM products WHERE products.id = ?;
?
가 바뀌 'TB100'
었다고 가정하면 첫 번째 쿼리와 두 번째 쿼리 모두 정확히 동일한 결과 (예 : 1
이 대화의 경우)를 반환합니다 . 마지막 쿼리는 'TB100'
예상대로 반환 되거나 id
테이블에 없는 경우 아무 것도 반환 하지 않습니다.
목적은 id
테이블에 있는지 여부를 파악하는 것 입니다. 그렇지 않은 경우 프로그램은 다음에 레코드를 삽입합니다. 레코드가있는 경우 프로그램은이 질문의 범위를 벗어난 다른 프로그램 논리에 따라 레코드를 건너 뛰거나 UPDATE 쿼리를 수행합니다.
어느 것이 더 빠르고 오버 헤드가 적습니까? (이는 프로그램 실행마다 수만 번 반복되며 하루에 여러 번 실행됩니다).
(M $ 제공 JDBC 드라이버를 통해 Java에서 M $ SQL Server에 대해이 쿼리 실행)
if exists(select null from products where id = @id)
; 클라이언트에 의해 직접 호출하는 쿼리의 경우 select case when exists (...) then 1 else 0 end
.