有效ip->位置查询

发布于 2024-09-28 23:01:39 字数 869 浏览 1 评论 0原文

我有两个表:一个是来自 ipinfodb.com 的 ip_group_city,其中包含用于确定 IP 位置的 ip_start 编号,另一个是“访问”,其中包含有关包含“ip”列的网站访问者的信息。

我需要通过检查“访问”表中每个 IP 的区域代码来选择前 10 个区域代码(来自 ip_group_city)。

现在,我正在将“访问”中的所有 IP 加载到数组中,并使用该 IP 信息通过以下方式查询 ip_group_city:

SELECT region_code
FROM ip_group_city
WHERE ip_start <= INET_ATON(IP_FROM_ARR)
ORDER BY ip_start DESC LIMIT 1

我无法创建某种嵌套查询来为我完成这项工作,因为现在事情是有点慢:) - 在我的笔记本电脑 xampp(AMD Turion x2 2GHz,运行 Windows 7 旗舰版 64 位版本)上最多需要 30 秒

这是包含 IP 地址(访问)的表格,

CREATE TABLE IF NOT EXISTS `visits` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`clientid` mediumint(8) unsigned NOT NULL,
`ip` varchar(15) NOT NULL,
`url` varchar(512) NOT NULL,
`client_version` varchar(64) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=49272 ;

谢谢

I have two tables: one is ip_group_city from ipinfodb.com containing ip_start numbers for determining location of IPs, and other is "visits" with information about web site visitor containing column 'ip'.

I need to select top 10 region_code (from ip_group_city) by checking region_code for each IP from "visits" table.

Right now I'm loading all IPs from "visits" into an array and using that IP info to query the ip_group_city by:

SELECT region_code
FROM ip_group_city
WHERE ip_start <= INET_ATON(IP_FROM_ARR)
ORDER BY ip_start DESC LIMIT 1

I'm unable to create some sort of nested query to do the job for me, because right now things are a bit slow :) - it takes up to 30s on my laptop xampp (AMD Turion x2 2GHz, running windows 7 ultimate 64bit version)

Here's the table with IP addresses (visits)

CREATE TABLE IF NOT EXISTS `visits` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`clientid` mediumint(8) unsigned NOT NULL,
`ip` varchar(15) NOT NULL,
`url` varchar(512) NOT NULL,
`client_version` varchar(64) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=49272 ;

Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

心凉怎暖 2024-10-05 23:01:39

既然您说欢迎其他解决方案...

您可能想查看 MaxMind。他们可以通过 IP 进行良好的国家和城市查找。您可以安装 Apache 或 PHP 插件来提高速度 - 甚至不必自己处理数据库。

Since you said other solutions are welcomed...

You might want to check out MaxMind. They have good country and city lookups by IP. You can install an Apache or PHP plugin to make it fast - don't even have to handle the database yourself.

紫竹語嫣☆ 2024-10-05 23:01:39

为表建立索引:

ALTER TABLE `ip_group_city` ADD INDEX ( `ip_start` )

获取前 10 个区域代码:

SELECT igc.region_code
FROM ip_group_city igc
JOIN visits v ON igc.ip_start = v.ip
GROUP BY igc.region_code
ORDER BY COUNT(*) DESC
LIMIT 10

To index your table:

ALTER TABLE `ip_group_city` ADD INDEX ( `ip_start` )

To get the top 10 region_codes:

SELECT igc.region_code
FROM ip_group_city igc
JOIN visits v ON igc.ip_start = v.ip
GROUP BY igc.region_code
ORDER BY COUNT(*) DESC
LIMIT 10
绝情姑娘 2024-10-05 23:01:39
ALTER TABLE `ip_group_city` ADD INDEX ( `ip_start` )

这就是我要说的。一定要使用 btree 而不是 hash :D

ALTER TABLE `ip_group_city` ADD INDEX ( `ip_start` )

thats all i'm saying. be sure to use btree and not hash :D

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文