En lisant de la documentation liée au réglage SQL, j'ai trouvé ceci:
SELECT COUNT(*)
:
- Compte le nombre de lignes.
- Souvent utilisé de manière inappropriée pour vérifier l'existence d'un enregistrement.
Est SELECT COUNT(*)
vraiment si mauvais?
Quelle est la bonne façon de vérifier l'existence d'un enregistrement?
sql
optimization
query-optimization
systempuntoout
la source
la source
Je préférerais ne pas utiliser du tout la fonction Count:
Par exemple, si vous souhaitez vérifier si l'utilisateur existe avant de l'insérer dans la base de données, la requête peut ressembler à ceci:
la source
Vous pouvez utiliser:
S'il n'y a aucun enregistrement correspondant à la condition, le jeu d'enregistrements résultant est vide.
la source
Les autres réponses sont assez bonnes, mais il serait également utile d'ajouter
LIMIT 1
(ou l'équivalent , pour éviter la vérification des lignes inutiles.la source
fera une boucle à travers tous les enregistrements. C'est la raison pour laquelle il est mauvais d'utiliser pour l'existence d'un enregistrement.
j'utiliserais
Après avoir trouvé 1 enregistrement, il terminera la boucle.
la source
SELECT TOP 1
cela se terminera-t-il réellement après en avoir trouvé un ou continuera-t-il à tout trouver pour pouvoir dire lequel est TOP?IF EXISTS (SELECT TOP 1 1 FROM ... WHERE ..)
Vous pouvez utiliser:
ou
Ce sera plus efficace que
SELECT *
puisque vous sélectionnez simplement la valeur 1 pour chaque ligne, plutôt que tous les champs.Il y a aussi une différence subtile entre COUNT (*) et COUNT (nom de colonne):
COUNT(*)
comptera toutes les lignes, y compris les valeurs nullesCOUNT(column name)
ne comptera que les occurrences non nulles du nom de la colonnela source
count(1)
etcount(*)
ne sera différente que dans le SGBD le plus mort cérébral.count(*)
etcount(1)
. Que ce soit le cas pour d' autres SGBD, je ne peux pas le dire.Vous pouvez utiliser:
Utilisez
select 1
pour empêcher la vérification des champs inutiles.Utilisez
LIMIT 1
pour empêcher la vérification des lignes inutiles.la source
J'utilise de cette façon:
la source
Autre option:
la source