Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 网络爬虫SQLite3选择下一个链接进行爬网速度非常慢_Python_Mysql_Performance_Sqlite_Web Crawler - Fatal编程技术网

Python 网络爬虫SQLite3选择下一个链接进行爬网速度非常慢

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

我正在用python制作一个网络爬虫,但sqlite查询有问题。查询工作正常,但速度非常慢,有更好的方法吗?通常我对sql很在行,但我真的遇到了所有这些参数的限制

表链接包含从网站href=LINK爬网的链接。 下面的sql输出一个链接,下一步应该对该链接进行爬网

在特定时间内,主机上只能爬网x个站点

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—本例中的原则是生成一个派生表,有效地减少行数,然后再到达其他列。指数正在覆盖。