我的页面运行缓慢,我的页面上至少有20个“选择计数”查询,每行至少有两个字段构成一个计数子查询。我虽然不会那么慢,但现在不确定。我想知道哪种是这种情况下的默认方法。 (如果我需要索引某些列,我也想决定哪一列,但是count函数从某个表中计算ID,因此我也不认为这是一个棘手的问题。”

if(isset($_GET["me"])) $me="and post.memberid=".$_SESSION["memberid"]; else $me="";
$votecount="(select count(voteid) from vote where vote.postid=post.postid) as cv";
$commentcount="(select count(commentid) from comment where comment.postid=post.postid) as cc";
$countagree="(select count(voteid) from vote where vote=1 and vote.postid=post.postid) as ca";
$ismyvote=sprintf("(select vote from vote where memberid=%s and vote.postid=post.postid) as mvote",$_SESSION["memberid"]);
$plq=sprintf("select *, %s,%s,%s,%s from post where post.dateposted>=NOW() - INTERVAL %s day %s",$votecount,$commentcount,$countagree,$ismyvote,$since,$me);


当我开始进行开发时,我认为mysql将缓存主键字段的计数,并且不会造成任何问题。

最佳答案

我会同时尝试Vik的查询和danihp的计数器列方法。时间和比较结果-根据您的实际数据和应用程序。

但是,我确实相信,对您最大的帮助的真正答案是真正学习和使用解释计划(如果您还没有的话)

http://en.wikipedia.org/wiki/Explain_Plan

您提到“似乎很慢”和“我虽然不会那么慢,但现在不确定。”并且“所以我也不认为这是索引问题。”

因此,除非真正衡量更改的结果,并说明计划将对此有所帮助,并通过索引及其他更多操作,否则进行更改似乎将是一次反复的尝试。

祝好运!

关于mysql - 我应该使用(从表2中选择count(id))作为col1,还是应该将计数器存储在表1上并在插入时增加它?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8080286/

10-16 18:49