我有两个表,一个表(ipcountry)有以下列:
low, high, country
如果IP地址介于低位和高位之间,则属于国家/地区
其他表(日志)定义如下:
username, ipaddr
日志表大约为100 MB。我想基于他们的IP地址有效地找到用户所在的国家/地区。我尝试使用以下查询:
select distinct username from `logs`
left join `ipcountry` on `logs`.ipaddr between `ipcountry`.low and `ipcountry`.high
where `logs`.ipaddr='<my ipaddress goes here>'
然而,执行需要太长时间(我在一分钟后将其杀死)。我想知道,有更好的方法吗?
EXPLAIN SELECT结果:
编辑:我要做的是获取与ipaddr相关联的所有用户名,并在每一行旁边显示每个用户名来自的国家/地区(都将是同一个国家/地区)
答案 0 :(得分:0)
请在用户名和ipaddr上放置多列索引,它将优化查询。