Какво сте чували за сканиране на обхват и between
в MySQL просто не е вярно. Ето цитат от документацията
:
Така че използването на индекс не е изненадващо. Най-добрият индекс за тези данни би бил съставен индекс на start, end
.
Проблемът, който имате, е, че имате две колони start
и end
. Това прави заявката малко по-сложна.
Следното би могло да се представи по-добре при някои обстоятелства, с индекс на start
и отделен индекс в end
и първичен ключ в редовете:
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;