Wie der Titel schon sagt ... Ich versuche, den schnellsten Weg mit dem geringsten Aufwand herauszufinden, um festzustellen, ob ein Datensatz in einer Tabelle vorhanden ist oder nicht.
Beispielabfrage:
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 = ?;
Angenommen, die ?
wird ausgetauscht mit 'TB100'
... Sowohl die erste als auch die zweite Abfrage geben genau das gleiche Ergebnis zurück (sagen wir ... 1
für diese Konversation). Die letzte Abfrage wird 'TB100'
wie erwartet zurückgegeben oder nichts, wenn die id
nicht in der Tabelle vorhanden ist.
Der Zweck ist herauszufinden, ob das id
in der Tabelle ist oder nicht. Wenn nicht, fügt das Programm als nächstes den Datensatz ein. Wenn dies der Fall ist, überspringt das Programm ihn oder führt eine UPDATE-Abfrage basierend auf einer anderen Programmlogik außerhalb des Bereichs dieser Frage durch.
Was ist schneller und hat weniger Overhead? (Dies wird zehntausend Mal pro Programmlauf wiederholt und mehrmals täglich ausgeführt.)
(Ausführen dieser Abfrage für M $ SQL Server von Java über den von M $ bereitgestellten JDBC-Treiber)
if exists(select null from products where id = @id)
; wenn in einer Abfrage direkt von einem Client aufgerufen select case when exists (...) then 1 else 0 end
.