gpt4 book ai didi

mysql - 使用 INNER join 的 SQL 查询花费的时间太长

转载 作者:行者123 更新时间:2023-11-29 15:49:58 25 4
gpt4 key购买 nike

我有一个数据库,我在其中保存抓取的代理,然后不断检查它们,问题是我有一个使用指定过滤器计算代理总数的函数,例如:来自美国的 HTTP 代理至少有 70% 的正常运行时间大约需要 4 - 5 秒,虽然时间不是很多,但用户这次已经等不及更新计数器了。

为了过滤所有代理,在本例中我使用了 2 个表名为代理的表,在这里我插入带有一般信息、ISP、国家/地区、协议(protocol)等的代理

CREATE TABLE `proxies` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`ip` varchar(255) NOT NULL,
`port` varchar(255) NOT NULL,
`ishttp` varchar(255) NOT NULL,
`ishttps` varchar(255) NOT NULL,
`issocks4` varchar(255) NOT NULL,
`issocks5` varchar(255) NOT NULL,
`country` varchar(255) NOT NULL,
`city` varchar(255) NOT NULL,
`isp` varchar(255) NOT NULL,
`ismobile` varchar(10) NOT NULL,
`isdetected` varchar(10) NOT NULL,
`date_added` varchar(255) NOT NULL,
`last_checked` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=7981 DEFAULT CHARSET=latin1

和名为 http 的表,这里我只插入 http 代理,并保存正常运行时间、失败的检查、平均 ping 等(代理在两个表中都是重复的,我的意思是,如果代理是 HTTP,则转到代理并且http)

CREATE TABLE `http` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`ip` varchar(20) NOT NULL,
`port` varchar(10) NOT NULL,
`total` int(11) NOT NULL,
`successful` int(11) NOT NULL,
`failed` int(11) NOT NULL,
`last_successful` varchar(255) NOT NULL,
`last_failed` varchar(255) NOT NULL,
`uptime` varchar(255) NOT NULL,
`last_response` varchar(255) NOT NULL,
`response_sum` varchar(255) NOT NULL,
`avg_response` varchar(255) NOT NULL,
`anonimity` varchar(20) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3776 DEFAULT CHARSET=latin1

实际上,为了过滤我用户 INNER JOIN 的代理,这是一个例子:

SELECT * FROM http INNER JOIN 代理 ON http.ip=proxies.ip WHERE ishttp='yes' AND Country='USA' AND uptime >= '50'

这只是一个例子,用户可以按匿名(http.anonimity)、国家/地区(proxies.country)、正常运行时间(http.uptime)、ping(http.avg_response)、仅移动代理(proxies.ismobile)和仅通过代理(proxies.isDetected)

我还想补充一点,计数器会使用 JS 进行更新(意味着系统执行查询),并且每次用户修改表单中的任何值时

最佳答案

查询优化的关键方面是过滤条件。最有选择性的似乎是:第一个 proxies.country,第二个 proxies.ishttp

因此我将创建以下索引:

create index ix1 on proxies (country, ishttp);

create index ix2 on http (ip, uptime);

关于mysql - 使用 INNER join 的 SQL 查询花费的时间太长,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56819771/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com