57 Stimmen

Was ist die Leistung von mysql "BETWEEN" über ?

Gibt es eine bessere Leistung bei der Abfrage in (insbesondere) mysql der folgenden:

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

vorbei:

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

oder wird die BETWEEN-Syntax einfach durch die zweite Sql ersetzt?

51voto

tpdi Punkte 33618

Wenn ich mich recht erinnere, gibt es da 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 erstellen.

32voto

Paolo Bergantino Punkte 465120

En die Dokumentation :

  • expr ZWISCHEN min UND max

Si expr größer oder gleich ist als min y expr kleiner oder gleich ist als max gibt BETWEEN den Wert 1 zurück, andernfalls den Wert 0. Dies ist gleichbedeutend mit dem Ausdruck ( min <= expr UND expr <= max ), wenn alle Argumente vom gleichen Typ sind. Andernfalls erfolgt die Typkonvertierung nach den in Abschnitt 11.2, "Typkonvertierung bei der Auswertung von Ausdrücken", beschriebenen Regeln, allerdings für alle drei Argumente.

Es handelt sich also wirklich nur um Syntaxzucker.

8voto

alex Punkte 457905

BETWEEN zeigt eine klarere Absicht und liest sich besser (etwas, das SQL erreichen wollte).

5voto

Soufiane Ghzal Punkte 688

Die drei folgenden Anweisungen führen zum gleichen Ergebnis:

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

Aber in Konfiguration 3 könnte Mysql (abhängig von Ihren Indizes) verschiedene Indizes verwenden: Die Reihenfolge ist wichtig und Sie sollten mit EXPLAIN-Abfrage testen, um den Unterschied zu sehen

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X