Comme le titre l'indique ... j'essaie de trouver le moyen le plus rapide avec le moins de frais généraux pour déterminer si un enregistrement existe dans une table ou non.
Exemple de requête:
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 = ?;
Disons que le ?
est échangé avec 'TB100'
... les première et deuxième requêtes renverront exactement le même résultat (disons ... 1
pour cette conversation). La dernière requête retournera 'TB100'
comme prévu, ou rien si le id
n'est pas présent dans la table.
Le but est de savoir si le id
est dans le tableau ou non. Sinon, le programme insérera ensuite l'enregistrement, si tel est le cas, le programme l'ignorera ou effectuera une requête UPDATE basée sur une autre logique de programme en dehors du champ d'application de cette question.
Lequel est le plus rapide et a moins de frais généraux? (Cela sera répété des dizaines de milliers de fois par exécution de programme et sera exécuté plusieurs fois par jour).
(Exécution de cette requête sur M $ SQL Server à partir de Java via le pilote JDBC fourni par M $)
if exists(select null from products where id = @id)
; si dans une requête appelée directement par un client select case when exists (...) then 1 else 0 end
.