2010-12-07 3 views
32

Y at-il de meilleures performances lors de l'interrogation dans (en particulier) mysql des éléments suivants:Quelle est la performance "BETWEEN" de mysql par rapport à ..?

SELECT * FROM `table` WHERE `unix_date` BETWEEN 1291736700 AND 1291737300 

sur:

SELECT * FROM `table` WHERE `unix_date` >= 1291736700 AND `unix_date` <= 1291737300 

ou entre la syntaxe est juste d'être substitué par le second sql?

Répondre

31

Si je me souviens, il n'y a pas de différence. Mais voir par vous-même si:

explain plan for 
SELECT * FROM `table` WHERE `unix_date` BETWEEN 1291736700 AND 1291737300 

et:

explain plan for 
SELECT * FROM `table` WHERE `unix_date` >= 1291736700 AND `unix_date` <= 1291737300 

produisent les mêmes plans.

9

BETWEEN montre une intention plus claire et lit mieux (quelque chose que SQL a entrepris de faire).

20

De the documentation:

  • expr ENTRE min ET max

Si expr est supérieur ou égal à min et expr est inférieure ou égale à max, BETWEEN retourne 1, sinon il renvoie 0. Ceci est équivalent à l'expression (min < = expr ET expr < = max) si tous les arguments sont du même type. Sinon, la conversion de type s'effectue conformément aux règles décrites à la Section 11.2, «Conversion de type dans l'évaluation d'expression», mais appliquée à tous les trois arguments.

Donc, c'est juste du sucre de syntaxe.

1

Les trois déclaration suivante produira le même résultat:

  1. i BETWEEN x AND y
  2. x <= i AND i <= Y
  3. i >= x AND i <= Y

Mais dans la configuration 3 mysql peut (en fonction de vos index) utilisent différents indices : l'ordre des questions et vous devriez tester avec la requête EXPLAIN pour voir la différence

Questions connexes