Những gì bạn đã nghe về quét phạm vi và between
trong MySQL chỉ đơn giản là không đúng. Đây là trích dẫn từ tài liệu
:
Vì vậy, việc sử dụng một chỉ mục không có gì đáng ngạc nhiên. Chỉ mục tốt nhất cho dữ liệu này sẽ là chỉ mục tổng hợp trên start, end
.
Vấn đề mà bạn gặp phải là bạn có hai cột start
và end
. Điều này làm cho truy vấn phức tạp hơn một chút.
Có thể hình dung phần sau có thể hoạt động tốt hơn trong một số trường hợp, với chỉ mục trên start
và một chỉ mục riêng trên end
và khóa chính trên các hàng:
select gt.*
from (SELECT * FROM autumn4.ip WHERE :number >= start) gt join
(SELECT * FROM autumn4.ip WHERE :number <= end) lt
on gt.PRIMARYKEY = lt.PRIMARYKEY;