ip_start
にすでにインデックスがある場合 、これは、IPごとに1つのアクセスを作成することを想定した場合の最適な使用方法です(1234
この例では):
select organization from (
select ip_end, organization
from iptable
where ip_start <= 1234
order by ip_start desc
limit 1
) subqry where 1234 <= ip_end
これにより、インデックスを使用してスキャンが開始され、limit 1
のためにすぐに停止します。 。コストは、単純なインデックス付きアクセスのコストよりもわずかに高くする必要があります。もちろん、この手法は、ip_start
で定義された範囲という事実に依存しています。 およびip_end
重なることはありません。
元のアプローチの問題は、mysqlがこの制約を認識していないため、インデックスを使用して、クエリに一致するものをすべて見つけるために必要なスキャンを開始または停止する場所を決定することしかできないことです。
>