5 votes

SQL : BETWEEN et IN (qui est plus rapide)

Duplicata possible :
Y a-t-il une différence de performance entre BETWEEN et IN avec MySQL ou SQL en général ?

Si j'ai les identifiants suivants :

1,2,3,4,5,6

Est-il préférable d'utiliser la clause IN ou la clause between pour la suppression ?

11voto

Mark Byers Points 318575
  • Si vos identifiants sont toujours consécutifs vous devez utiliser BETWEEN .
  • Si vos identifiants peuvent être consécutifs ou non puis utiliser IN .

La performance ne devrait pas être le facteur décisif. Cela dit, BETWEEN semble être plus rapide dans tous les exemples que j'ai testés. Par exemple :

Sans index, vérification d'une table d'un million de lignes où chaque ligne a x = 1 :

SELECT COUNT(\*) FROM table1 WHERE x IN (1, 2, 3, 4, 5, 6);
Time taken: 0.55s

SELECT COUNT(\*) FROM table1 WHERE x BETWEEN 1 AND 6;
Time taken: 0.54s

Sans index, vérification d'une table d'un million de lignes où x a des valeurs uniques :

SELECT COUNT(\*) FROM table1 WHERE x IN (1, 2, 3, 4, 5, 6);
Time taken: 0.65s

SELECT COUNT(\*) FROM table1 WHERE x BETWEEN 1 AND 6;
Time taken: 0.36s

Un exemple plus réaliste est que la colonne id est unique et indexée. Dans ce cas, les performances des deux requêtes sont quasi instantanées.

SELECT COUNT(\*) FROM table2 WHERE x IN (1, 2, 3, 4, 5, 6);
Time taken: 0.00s

SELECT COUNT(\*) FROM table2 WHERE x BETWEEN 1 AND 6;
Time taken: 0.00s

Je dirais donc qu'il faut se concentrer sur la rédaction d'une instruction SQL claire plutôt que de se préoccuper de différences mineures dans la vitesse d'exécution. Et assurez-vous que la table est correctement indexée, car c'est ce qui fera la plus grande différence.

Note : Les tests ont été effectués sur SQL Server Express 2008 R2. Les résultats peuvent être différents sur d'autres systèmes.

4voto

Jeremy Points 2193

IN est équivalent à 1 or 2 or 3 or 4 or 5

Entre est équivalent à >= 1 and <= 6

Personnellement, j'utiliserais des fourchettes intermédiaires, mais les circonstances spécifiques et les moteurs à combustion lente peuvent également faire la différence.

2voto

TrustyCoder Points 1437

Si l'identifiant est la clé primaire, les deux requêtes devraient avoir le même coût. Évaluez le code SQL à l'aide d'un profileur.

1voto

Vivek Points 1341

Entre, à moins que vous ne vous attendiez à ce que les identifiants soient différents à l'avenir.

0voto

YoK Points 8221

L'intervalle est plus rapide car les comparaisons sont moins nombreuses. Avec la clause IN, chaque élément est parcouru à chaque fois.

Mais les objectifs des deux sont différents :

  • Entre est utilisé lorsque vous comparez des avec une série de valeurs dans une sorte de séquence.

  • IN est utilisé pour comparer des valeurs qui ne se suivent pas. séquence.

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