2010-12-07 7 views
32

Gibt es eine bessere Leistung, wenn sie in der Abfrage (insbesondere) mysql der folgenden:Was ist MySQL "BETWEEN" Leistung über ..?

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

über:

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

oder zwischen Syntax nur mit dem zweiten sql substituiert wird?

Antwort

31

Soweit ich mich erinnere, gibt es keinen Unterschied. Aber sehen Sie selbst, wenn:

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

und:

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

die gleichen Pläne produzieren.

9

BETWEEN zeigt klarere Absicht und liest besser (etwas, was SQL zu tun).

20

Von the documentation:

  • expr ZWISCHEN min UND max

Wenn expr größer oder gleich min und expr kleiner oder gleich max, BETWEEN gibt 1 zurück, andernfalls Es gibt 0 zurück. Dies entspricht dem Ausdruck (min < = expr AND expr < = max) wenn alle Argumente vom selben Typ sind. Andernfalls erfolgt die Typkonvertierung nach den Regeln, die in Abschnitt 11.2, "Typkonvertierung in der Ausdrucksauswertung" beschrieben sind, aber auf alle drei Argumente angewendet wird.

So ist es wirklich nur Syntaxzucker.

1

Die drei folgenden Anweisung wird das gleiche Ergebnis produzieren:

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

Aber in Konfiguration 3 mysql könnte (abhängig von Ihrer Indizes) verwenden unterschiedliche Indizes : Bestellung wichtig und Sie sollten mit EXPLAIN-Abfrage testen, um den Unterschied

zu sehen