Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.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
如何改进大型mysql数据库的“WHERE NOT EXIST”查询_Mysql_Database_Pdo - Fatal编程技术网

如何改进大型mysql数据库的“WHERE NOT EXIST”查询

如何改进大型mysql数据库的“WHERE NOT EXIST”查询,mysql,database,pdo,Mysql,Database,Pdo,我写的这个查询非常完美,但是由于数据库开始增长,这个查询变得越来越慢,直到现在执行起来几乎需要54秒。有没有办法改进这个查询,使其更快,因为我不想让这个54变得更长 SELECT twitter.user_id AS id FROM twitter WHERE NOT EXISTS ( SELECT stats.id FROM stats

我写的这个查询非常完美,但是由于数据库开始增长,这个查询变得越来越慢,直到现在执行起来几乎需要54秒。有没有办法改进这个查询,使其更快,因为我不想让这个54变得更长

SELECT 
        twitter.user_id AS id
        FROM twitter
        WHERE NOT EXISTS
                (
                SELECT  stats.id
                FROM    stats
                WHERE   stats.user_id = twitter.user_id AND stats.created_on >= now() - INTERVAL 1 DAY
                )
        GROUP BY twitter.id
        LIMIT 0 , 300

我猜您的字段缺少索引,因此我建议在连接列和日期字段时添加索引

因此,您可能需要在上添加索引

stats.user_id
twitter.user_id
stats.created_on

您可以使用explain查看查询的执行情况,它会告诉您查询中使用了哪些索引。

您是否在stats.user\u id、twitter.user\u id、stats.created\u on上有索引?我刚刚在它们上添加了索引,这能解决问题吗?是的!谢谢你,阿比克!如果你想回答这个问题,我会投票给你,在这个问题上,看看你得到了什么。。此外,您还可以使用explain查看查询的执行情况,并使用indexesTry在notexists上使用连接,这样会更快一些。您需要在stats user_id上创建索引。另一个解决方案是,您可以创建一个临时表,其中engine=memory和btree索引