mysql boolean where-Klausel auf
Frage ich mich, was ist schneller?
SELECT * FROM `table` WHERE `is_deleted` = false;
oder
SELECT * FROM `table` WHERE NOT `is_deleted`
Danke
- Weiß nicht sicher, aber meine Vermutung ist, dass der Abfrageoptimierer behandeln würde, die beiden Abfragen als gleichwertig.
- Ist die zweite Abfrage eigentlich gültig?
- ja, die zweite Abfrage ist gültig.
- kannst du nicht mal das?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Schema
Wir haben jetzt 3,1 M Zeilen.
Eine
B
So
A
ist schneller, weil es in der Lage ist, die Verwendung der native Datentyp (wie in einen index, der es in sich hat), und nicht zwingen eine Tabelle Scannen, die durch die ArtB
beschäftigt sich mit der Daten-Konvertierung (und hat Ursache ein table scan)Der Beweis dafür ist in der
explain
Ausgabe, mit der Anzahl derrows
erforderlich, um zu bestimmen, die Antwort, und das fehlen eines Verwendung eines index (derref
Spalte) auch auf die Spalte, die für beide Anfragen.Mysql-Handbuch Seite für Erläutern Sie Die Syntax.
SELECT * FROM
table
WO NICHTis_deleted
Dieser Abfrage erhalten Sie schneller und mit entsprechenden Ergebnis.
Weil in Mysql besser Nicht-operator für Boolesche Datentypen.
appropriate result
?