私のウェブサイトからのリクエストを拒否するIP範囲は約100,000件のデータベースがあります。効率的なIP範囲の検索PHPとMySQL
これらの範囲を格納するテーブルの形式で、私は、その後ユーザIPかどうかを決定するために、以下のSQLクエリを使用ip2long
を使用して整数値にユーザーにIP変換PHPを使用
ip_from (int)
ip_to (int)
ありますテーブルの範囲内に存在する。
SELECT `ip_from`
FROM `ip2location_proxy`
WHERE '".$ip."' BETWEEN ip_from AND ip_to LIMIT 1
これは、サーバーの負荷が大きくなるという問題です。 BETWEEN
コマンドを使用する代わりのように、IPがデータベースに指定された範囲内にあるかどうかを検出するためのより良い方法を提案できるかどうか疑問に思っています。
聖なる煙は、なぜあなたが禁止している100kのIPアドレスを持っていますか? 1つのHTTPリクエストごとに100kレコードを効率的に検索する方法が本当にあるかどうかはわかりません。 –
インデックスが 'ip_from'または' ip_to'のいずれかにあることを確認してください。 – Barmar
クエリで示唆されているようにip2locationを使用している場合は、はるかに効率的で高速なBIN形式を使用してください。 –