- Wenn Ihre ids immer aufeinander folgende sind, sollten Sie
BETWEEN
verwenden.
- Wenn Ihre IDs möglicherweise nicht fortlaufend sind, dann verwenden Sie
IN
.
Leistung sollte nicht wirklich der entscheidende Faktor hier sein. Allerdings scheint BETWEEN in allen von mir getesteten Beispielen schneller zu sein. Zum Beispiel:
Ohne Indizes eine Tabelle mit einer Million Zeilen überprüft, wo jede Zeile hat 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
Ohne Indizes eine Tabelle mit einer Million Zeilen überprüft, wobei 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 dafür ist aber, dass die id Spalte eindeutig und indiziert ist. Wenn Sie dies tun, wird die Leistung beider Abfragen fast augenblicklich.
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
Also würde ich sagen, konzentrieren sich auf das Schreiben einer klaren SQL-Anweisung, anstatt sich über geringfügige Unterschiede in der Ausführungsgeschwindigkeit zu sorgen. Und stellen Sie sicher, dass die Tabelle korrekt indexiert ist, da dies den größten Unterschied macht.
Hinweis: Die Tests wurden auf SQL Server Express 2008 R2 ausgeführt. Die Ergebnisse können auf anderen Systemen abweichen.
Ich würde denken, dass die Leistung für Abfragen oder Löschen die gleiche ist. – FrustratedWithFormsDesigner
Ehrlich gesagt kann diese Art von Frage nicht beantwortet werden * es kommt darauf an *. 'zwischen' scheint genau hier zu sein, aber ist es schneller? Wird es immer schneller sein? Es ist beträchtlich, im Zusammenhang mit dem Löschen von Daten? Welche DBMS hast du, Indizes usw. Nur du kannst das beantworten, indem du nachprüfst. – Kobi
Entschuldigung MSSQL 2005 – RPS