188 votes

Le moyen le plus rapide de déterminer si un enregistrement existe

Comme le titre le suggère... J'essaie de trouver le moyen le plus rapide et le moins coûteux de déterminer si un enregistrement existe ou non dans une table.

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 = ?;

Dites le ? est échangé avec 'TB100' ... la première et la seconde requête renverront exactement le même résultat (disons... 1 pour cette conversation). La dernière requête renverra 'TB100' comme prévu, ou rien si le id n'est pas présent dans le tableau.

Le but est de déterminer si le id est dans le tableau ou non. Si ce n'est pas le cas, le programme insère l'enregistrement. S'il l'est, le programme l'ignore ou exécute une requête UPDATE en fonction d'une autre logique de programme qui n'entre pas dans le cadre de cette question.

Lequel est le plus rapide et présente le moins de frais généraux ? (Cette question sera répétée des dizaines de milliers de fois par exécution du programme, et sera exécutée plusieurs fois par jour).

(Exécution de cette requête contre le serveur SQL de M$ à partir de Java via le pilote JDBC fourni par M$)

0voto

Eric Parsons Points 1

J'ai utilisé cette méthode dans le passé et elle ne nécessite pas un balayage complet de la table pour voir si quelque chose existe. C'est super rapide...

UPDATE TableName SET column=value WHERE column=value
IF @@ROWCOUNT=0
BEGIN
     --Do work
END

0voto

Muhammed Fasil Points 1961

Pour MySql vous pouvez utiliser LIMIT comme ci-dessous (l'exemple montre en PHP)

  $sql = "SELECT column_name FROM table_name WHERE column_name = 'your_value' LIMIT 1";
  $result = $conn->query($sql);
  if ($result -> num_rows > 0) {
      echo "Value exists" ;
  } else {
      echo "Value not found";
  }

0voto

Mohammad Points 2448

SQL SERVER 2012+

SELECT IIF((SELECT TOP 1 1 FROM dbo.[YourTable] WHERE [YourColumn] = [YourValue]) IS NULL, 0, 1)

-1voto

Äxel Points 151

Pourquoi ne pas simplement utiliser

SELECT EXISTS (SELECT 1 FROM products WHERE products.id = ?)

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