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 ... 1dla tej rozmowy). Ostatnie zapytanie zwróci 'TB100'zgodnie z oczekiwaniami lub nic, jeśli idnie ma w tabeli.
Celem jest ustalenie, czy idjest 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.