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;