処理に時間がかかるmySQLクエリがあります。 url_clickテーブルの各IPの発信元を検出するために、国コードに関連するIP範囲の大きなテーブルを照会しています。 (IPデータベースからのhxxp://ip-to-country.webhosting.info/)mySQLクエリは効率的ですか?
それはゆっくりではあるが、すばらしく動作します。
このクエリを書くより効率的な方法はありますか?
表と出力JPG:http://tiny.cx/a4e00d
SELECT ip_addr AS IP, geo_ip.ctry, count(ip_addr) as count
FROM `admin_adfly`.`url_click`,admin_adfly.geo_ip
WHERE INET_ATON (ip_addr)
BETWEEN geo_ip.ipfrom AND geo_ip.ipto
AND url_id = 165
GROUP BY ip_addr;
私はこの種のことについてhttp://codereview.stackexchange.comをお勧めしますか? –
カラムの 'INET_ATON()'の結果をフィルタリングすると思われるのは、 'INET_ATON()'を 'url_id = 165'のものすべてに適用してテーブルをスキャンする必要があるということです。 - ' INET_ATONどういうわけか、列としてのアドレス?また、あなたはurl_idにインデックスを持っていますか?また、MySQLにクエリの 'EXPLAIN'を依頼すれば、何が得られますか? – marnir
ありがとうございます。私はQuassnoiのインデックス作成の提案を試みましたが、何らかの理由でbツリーストレージタイプを作成できませんでした。私はその後、ジョナサン・レフラーの提案を試みましたが、これはクエリーから秒をずらしましたが、それでも時間がかかりました。私は、質問を投稿するのではなく、最初の記録エントリの時点でIPに関連する国に問い合わせることに決めました。 – Damo