374 votes

Meilleure façon de tester si une ligne existe dans une table MySQL

J’essaie de savoir si une ligne existe dans une table. À l’aide de MySQL, est-il préférable de faire une requête comme ceci :

et vérifier pour voir si le total n’est pas nulle, ou est-il préférable de faire une requête comme ceci :

et vérifiez si toutes les lignes ont été retournées ?

Dans les deux requêtes, la clause WHERE utilise un index.

503voto

Chris Thompson Points 18375

Vous pouvez également essayer d’utiliser

par la documentation

Par un commentaire ci-dessous :

203voto

Laurent Wartel Points 940

J'ai fait quelques recherches à ce sujet récemment. La façon de mettre en œuvre elle doit être différente si le champ est un champ de TEXTE, un champ unique.

J'ai fait quelques tests avec un champ de TEXTE. Compte tenu du fait que nous avons une table avec 1M d'entrées. 37 entrées sont égales à "quelque chose":

  • SELECT * FROM test WHERE texte LIKE '%something%' LIMIT 1avec mysql_num_rows() : 0.039061069488525 s. (Plus RAPIDE)
  • SELECT count(*) as count FROM test WHERE text LIKE '%something%: 16.028197050095 s.
  • SELECT EXISTS(SELECT 1 FROM test WHERE text LIKE '%something%'): 0.87045907974243 s.
  • SELECT EXISTS(SELECT 1 FROM test WHERE text LIKE '%something%' LIMIT 1) : 0.044898986816406 s.

Mais maintenant, avec un BIGINT PK champ, une seule entrée est égal à '321321' :

  • SELECT * FROM test2 WHERE id ='321321' LIMIT 1avec mysql_num_rows() : 0.0089840888977051 s.
  • SELECT count(*) as count FROM test2 WHERE id ='321321' : 0.00033879280090332 s.
  • SELECT EXISTS(SELECT 1 FROM test2 WHERE id ='321321') : 0.00023889541625977 s.
  • SELECT EXISTS(SELECT 1 FROM test2 WHERE id ='321321' LIMIT 1) : 0.00020313262939453 s. (Plus RAPIDE)

32voto

jaltek Points 990

Un court exemple de réponse de @ChrisThompson

Exemple :

À l’aide d’un alias :

5voto

Fatih Karatana Points 481

Vous conseille ne pas d’utiliser car le comte fait toujours des charges supplémentaires pour l’utilisation de db et retourne 1 si votre dossier droit il autrement elle retourne null et vous pouvez le gérer.

2voto

Aayush Puri Points 479

Si vous êtes stockage BLOB etc. dans votre table puis obtenir count (*) performance peut être vraiment mauvais.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X