2015-07-29 17 views
5

Tôi có một bảng với một điển hình unsigned int khóa chính idGIỮ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?

+0

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

+0

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

+0

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

Trả lời

-2

SELECT * FROM log_data ĐÂU id < = -129 và id> = -120

Các vấn đề liên quan