Jak sugeruje tytuł ... Próbuję znaleźć najszybszy sposób przy jak najmniejszym narzucie, aby określić, czy rekord istnieje w tabeli, czy nie.
Przykładowe zapytanie:
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 = ?;
Powiedzmy, że ?
jest zamienione na 'TB100'
... zarówno pierwsze, jak i drugie zapytanie zwróci dokładnie ten sam wynik (powiedzmy ... 1
dla tej rozmowy). Ostatnie zapytanie zwróci 'TB100'
zgodnie z oczekiwaniami lub nic, jeśli id
nie ma w tabeli.
Celem jest ustalenie, czy id
jest w tabeli, czy nie. Jeśli nie, program następnie wstawi rekord, jeśli tak, program go pominie lub wykona zapytanie UPDATE w oparciu o inną logikę programu spoza zakresu tego pytania.
Który jest szybszy i mniejszy? (Będzie to powtarzane dziesiątki tysięcy razy podczas każdego uruchomienia programu i będzie uruchamiane wiele razy dziennie).
(Uruchamianie tego zapytania względem M $ SQL Server z Java za pośrednictwem sterownika JDBC dostarczonego przez M $)
if exists(select null from products where id = @id)
; jeśli w zapytaniu wywoływanym bezpośrednio przez klienta select case when exists (...) then 1 else 0 end
.