Tôi có một bảng với một điển hình unsigned int khóa chính id
GIỮA sử dụng các giá trị âm và ints unsigned
select * from log_data where id between -129 and -120
dường như cố gắng để trở lại mỗi hàng trong bảng (hoặc ít nhất là bị mắc kẹt tại 'gửi dữ liệu 'hàng giờ đồng hồ)
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
Theo các tài liệu trên BETWEEN
tại https://dev.mysql.com/doc/refman/5.0/en/comparison-operators.html#operator_between: này tương đương với biểu thức (min < = expr VÀ expr < = max) nếu tất cả các đối số của cùng một loại
Tuy nhiên,
select * from log_data where -129 <= id and id <= -120
cư xử như tôi mong đợi.
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
Đây có phải là lỗi hoặc hành vi này có thể được giải thích không?
Trông giống như một lỗi với tôi. Tôi không thể nghĩ ra bất kỳ lý do nào cho nó. – Vatev
Bạn đang sử dụng phiên bản nào của mysql? Đã thử mã của bạn trên 5.6.25 và nó ok (hoạt động như mong đợi - không có kết quả trong 0,001 giây) –
Tôi đang ở trên 5.6.19. Nếu truy vấn hoàn thành tôi không chắc chắn tôi thực sự sẽ nhận được bất kỳ hàng nào nhưng bảng là> 10gb và truy vấn nằm ở "Gửi dữ liệu" trong ít nhất một giờ. Bạn đang thử nó trên một cái bàn lớn phải không? – cryocide