Verwendung habe ich eine Tabelle mit einem typischen unsigned int Primärschlüssel id
zwischen negativen Werten und unsigned ints
select * from log_data where id between -129 and -120
scheinbar versucht, auf ‚jede Zeile in der Tabelle (oder zumindest fest Senden von Daten zurück bekommt 'für Stunden)
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE log_data ALL PRIMARY NULL NULL NULL 357114 Using where
nach der Dokumentation auf BETWEEN
an https://dev.mysql.com/doc/refman/5.0/en/comparison-operators.html#operator_between: Dies ist gleichbedeutend mit dem Ausdruck (min < = ausdr UND ausdr < = max), wenn alle Argumente vom gleichen Typ sind
jedoch
select * from log_data where -129 <= id and id <= -120
benimmt sich wie ich erwarten würde.
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL Impossible WHERE noticed after reading const tables
Ist dies ein Fehler, oder kann dieses Verhalten erklärt werden?
Sieht aus wie ein Bug zu mir. Ich kann mir keinen Grund dafür vorstellen. – Vatev
Welche Version von MySQL verwenden Sie? Versuchte den Code auf 5.6.25 und es ist in Ordnung (funktioniert wie erwartet - keine Ergebnisse in 0.001 Sekunden) –
Ich bin am 5.6.19. Wenn die Abfrage abgeschlossen ist, bin ich mir nicht sicher, ob ich wirklich irgendwelche Zeilen bekommen würde, aber die Tabelle ist> 10 GB und die Abfrage befindet sich für mindestens eine Stunde bei "Daten senden". Hast du es auch auf einem großen Tisch versucht? – cryocide