Python 网络爬虫SQLite3选择下一个链接进行爬网速度非常慢
我正在用python制作一个网络爬虫,但sqlite查询有问题。查询工作正常,但速度非常慢,有更好的方法吗?通常我对sql很在行,但我真的遇到了所有这些参数的限制 表链接包含从网站href=LINK爬网的链接。 下面的sql输出一个链接,下一步应该对该链接进行爬网 在特定时间内,主机上只能爬网x个站点Python 网络爬虫SQLite3选择下一个链接进行爬网速度非常慢,python,mysql,performance,sqlite,web-crawler,Python,Mysql,Performance,Sqlite,Web Crawler,我正在用python制作一个网络爬虫,但sqlite查询有问题。查询工作正常,但速度非常慢,有更好的方法吗?通常我对sql很在行,但我真的遇到了所有这些参数的限制 表链接包含从网站href=LINK爬网的链接。 下面的sql输出一个链接,下一步应该对该链接进行爬网 在特定时间内,主机上只能爬网x个站点 SELECT *, (SELECT COUNT(*) FROM links AS b WHERE b.hostname = a.hostname and b.lastCrawledTimestam
SELECT *,
(SELECT COUNT(*) FROM links AS b WHERE b.hostname = a.hostname and b.lastCrawledTimestamp < ?)
AS hostLimitCount
FROM links AS a WHERE hostLimitCount < ? and lastCrawledTimestamp < ?
LIMIT 1
lastCrawledTimestamp具有索引
主机名有一个索引
谢谢大家! 子查询将受益于
INDEX(hostname, lastCrawledTimestame)
此外,将其由内而外,如以下所示,可能会有所帮助:
SELECT a.*, x.hostLimitCount
FROM
(
SELECT b.hostname, COUNT(*) AS hostLimitCount
FROM links AS b
WHERE b.lastCrawledTimestamp < ?
GROUP BY hostname
HAVING hostLimitCount < ?
LIMIT 1
) AS x
JOIN links AS a USING(hostname)
这可能会从相同的索引中受益。为什么要添加mysql标记?您可以向Sqlite询问问题,并在问题中正确地显示它的格式。它可能会透露更多信息。它使用几乎相同的语法。如果有人只讲MySQL语法,他也可以帮助我,甚至不知道SQLite。问题不是关于SQLite,而是关于SQL本身。另外,如果其他人在MySQL上有这个问题,他可能会使用相同的解决方案。事实上,上面的SQL,可以用于MySQL和SQLite.SQLs,差别很大。这看起来像是MySQL代码。MySQL可以处理复合索引;Sqlite可以吗?是的,我知道。。但是你知道我的意思。。显然你比我更了解这件事。非常感谢。我想我应该学习更多关于连接和这些东西。。。您的查询速度快了一百万倍。@Pitchbloas—本例中的原则是生成一个派生表,有效地减少行数,然后再到达其他列。指数正在覆盖。