2015-07-29 20 views
5

Verwendung habe ich eine Tabelle mit einem typischen unsigned int Primärschlüssel idzwischen 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?

+0

Sieht aus wie ein Bug zu mir. Ich kann mir keinen Grund dafür vorstellen. – Vatev

+0

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) –

+0

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

Antwort

-2

SELECT * FROM log_data WHERE id < = -129 und id> = -120

Verwandte Themen