Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.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在X天内获得最多回复的线程连接线程大约需要1秒_Mysql_Join_Left Join_Vbulletin_Sqlperformance - Fatal编程技术网

MySQL在X天内获得最多回复的线程连接线程大约需要1秒

MySQL在X天内获得最多回复的线程连接线程大约需要1秒,mysql,join,left-join,vbulletin,sqlperformance,Mysql,Join,Left Join,Vbulletin,Sqlperformance,我想展示一个基于vbulletin的论坛的10个线程,这个论坛本周回复最多。因此,我编写了一个查询,以统计按threadid分组的timespan中的所有帖子,以确保每个线程在此列表中仅出现一次: SELECT post.postid, COUNT(post.postid) AS replys FROM post WHERE post.visible = 1 AND post.dateline > DATE_SUB("2016-01-21", INTERVAL - 7 DAY) GROUP

我想展示一个基于vbulletin的论坛的10个线程,这个论坛本周回复最多。因此,我编写了一个查询,以统计按threadid分组的timespan中的所有帖子,以确保每个线程在此列表中仅出现一次:

SELECT post.postid, COUNT(post.postid) AS replys
FROM post
WHERE post.visible = 1
AND post.dateline > DATE_SUB("2016-01-21", INTERVAL - 7 DAY)
GROUP BY post.threadid
ORDER BY replys DESC, post.dateline DESC
LIMIT 10
这个查询在一个数据库上花费了大约0.3秒,其中POST大约有400.000行,线程大约有40.000行,这看起来有点长,但仍然可以接受,这也是因为它可以缓存

但是我还需要一些关于线程表的信息,比如titel,它需要一个连接:

SELECT post.postid, COUNT(post.postid) AS replys,
thread.title, thread.views, thread.replycount 
FROM post
INNER JOIN thread ON(thread.threadid = post.threadid)
WHERE post.visible = 1
AND post.dateline > DATE_SUB("2016-01-21", INTERVAL - 7 DAY)
GROUP BY post.threadid
ORDER BY replys DESC, post.dateline DESC
LIMIT 10
现在我的查询耗时约1秒,这太多了!我可以做些什么来加快查询速度

有关表格结构的信息:

发布

线程


这个建议听起来很奇怪,但它经常帮助我:使用子查询

首先,只需进行计数,并将此查询中涉及的字段数减少到最小。您的子查询应该只返回计数和一个适用于获取所有其他数据的id(很可能是
threadid

然后连接结果并获取其余数据


如果这能为您节省半秒钟的时间,我不会感到惊讶。

这个建议听起来可能有些奇怪,但它经常帮助我:使用子查询

首先,只需进行计数,并将此查询中涉及的字段数减少到最小。您的子查询应该只返回计数和一个适用于获取所有其他数据的id(很可能是
threadid

然后连接结果并获取其余数据

如果这能为你节省半秒钟,我也不会感到惊讶