5 Stimmen

SQL: BETWEEN und IN (was schneller ist)

Mögliches Duplikat:
Gibt es einen Leistungsunterschied zwischen BETWEEN und IN bei MySQL oder bei SQL im Allgemeinen?

Wenn ich die folgenden IDs habe:

1,2,3,4,5,6

Ist es besser, IN oder die Between-Klausel zum Löschen zu verwenden?

11voto

Mark Byers Punkte 761508
  • Wenn Ihre IDs sind immer fortlaufend sollten Sie BETWEEN .
  • Wenn Ihre IDs kann, muss aber nicht fortlaufend sein dann verwenden Sie IN .

Die Leistung sollte hier nicht wirklich der entscheidende Faktor sein. Allerdings scheint BETWEEN in allen Beispielen, die ich getestet habe, schneller zu sein. Zum Beispiel:

Ohne Indizes wird eine Tabelle mit einer Million Zeilen geprüft, in der jede Zeile x = 1 ist:

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

Ohne Indizes wird eine Tabelle mit einer Million Zeilen geprüft, in der x eindeutige Werte hat:

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

Ein realistischeres Beispiel ist jedoch, dass die id-Spalte eindeutig und indiziert ist. Wenn Sie dies tun, wird die Leistung beider Abfragen nahezu sofort erreicht.

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

Ich würde also sagen, konzentrieren Sie sich darauf, eine klare SQL-Anweisung zu schreiben, anstatt sich über kleine Unterschiede in der Ausführungsgeschwindigkeit Gedanken zu machen. Und stellen Sie sicher, dass die Tabelle korrekt indiziert ist, denn das macht den größten Unterschied.

Hinweis: Die Tests wurden mit SQL Server Express 2008 R2 durchgeführt. Die Ergebnisse können auf anderen Systemen anders ausfallen.

4voto

Jeremy Punkte 4708

IN ist gleichbedeutend mit 1 or 2 or 3 or 4 or 5

Zwischen ist gleichbedeutend mit >= 1 and <= 6

Ich persönlich würde zwischen den einzelnen Bereichen wählen, aber bestimmte Umstände und DB-Motoren können auch einen Unterschied machen.

2voto

TrustyCoder Punkte 4560

Hängt davon ab, ob Indizes implementiert sind. Wenn die id der Primärschlüssel ist, sollten beide Abfragen die gleichen Kosten haben. Evaluieren Sie die SQL mit einem Profiler.

1voto

Viv Punkte 2465

Zwischen-Klausel, es sei denn, Sie erwarten, dass die Id's in Zukunft anders sein werden.

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