我有一个需要很长时间来处理的mySQL查询。我正在查询与国家/地区代码相关的IP范围大表,以查找url_click表中每个IP的原始国家/地区。 (来自hxxp://ip-to-country.webhosting.info/的IP数据库)我的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'查询'查询,你会得到什么? – marnir
谢谢大家。我试过Quassnoi建议创建一个索引,但由于某种原因,我无法创建一个b-tree存储类型。然后我尝试了乔纳森·莱弗勒的建议,这确实为查询减少了几秒钟,但它仍然需要很长时间。我决定在初始记录输入点而不是后期查询中查询与IP相关的国家。 – Damo