各行に整数の範囲(IPアドレス相当)のジオコーディングデータベースがあります。 fromip
(long)toip
(long)整数はIPアドレスからphp ip2longで作成されますmysqlのIP範囲を照会する最も効率的な方法
与えられたIPアドレス(longに変換)が範囲内にある行を見つける必要があります。
これを行う最も効率的な方法は何でしょうか? (キーとクエリ)
select * from ipranges where fromip <= givenip and toip >= givenip limit 1
とのキーはfromip, toip
です。 IPアドレスが指定された範囲にない場合、検索はすべての行を通過します。
SOME MORE INFO:
ipfrom < = 2130706433とipfrom昇順 リミット1によってIPTO> = 2130706433ためipranges SELECT * FROM説明|
は私に2.5M行(表では合計3.6M)を与えます。 キーは、次のとおりです。すべてで効率的ではないようです
PRIMARY KEY(
ipfrom
、ipto
)
。 (上のipは範囲にありません)
「チェス盤」の問題に直面しています:http://use-the-index-luke.com/sql/where-clause/searching-for-ranges/index-combine-performance –