O que você ouviu sobre varreduras de intervalo e
between
no MySQL simplesmente não é verdade. Aqui está uma citação da documentação
:Portanto, o uso de um índice não é surpreendente. O melhor índice para esses dados seria um índice composto em
start, end
. O problema que você tem é que você tem duas colunas
start
e end
. Isso torna a consulta um pouco mais complicada. O seguinte pode ter um desempenho melhor em algumas circunstâncias, com um índice em
start
e um índice separado no end
e uma chave primária nas linhas: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;