Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.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 数据库查询——最好是计算行数,还是保留增量计数器?_Mysql_Database Design_Querying - Fatal编程技术网

Mysql 数据库查询——最好是计算行数,还是保留增量计数器?

Mysql 数据库查询——最好是计算行数,还是保留增量计数器?,mysql,database-design,querying,Mysql,Database Design,Querying,如果您正在实现一个博客应用程序,您更喜欢什么? 在“POSTS”表中有一个计数器,用于存储评论的数量 SELECT comment_count FROM posts WHERE post_id = $id …或从“评论”表中计算特定帖子的评论数: 哪一种更优化?我会使用第二种形式COUNT,直到我确定特定SQL查询中的性能是个问题。你在第一部分中建议的基本上是非规范化,当你确定你需要它时,这是很好的 索引将允许您快速执行第二个查询。让我们看看这些因素 案例1:当你显示帖子时,你会显示评

如果您正在实现一个博客应用程序,您更喜欢什么?
在“POSTS”表中有一个计数器,用于存储评论的数量

SELECT comment_count 
  FROM posts WHERE post_id = $id 
…或从“评论”表中计算特定帖子的评论数:


哪一种更优化?

我会使用第二种形式COUNT,直到我确定特定SQL查询中的性能是个问题。你在第一部分中建议的基本上是非规范化,当你确定你需要它时,这是很好的


索引将允许您快速执行第二个查询。

让我们看看这些因素

案例1:当你显示帖子时,你会显示评论。这意味着您可以检索它们,并在显示它们时对它们进行计数。那样的话,没有

案例2:当你显示帖子时,你不显示评论,而是显示一个链接,上面写着“15条评论”。在这种情况下,有一个等式

具体化计数:

保存一条注释的成本=1次插入+1次更新

一次post显示的成本=1次读取

博客显示的平均数量=D

平均评论数=C

那么,显示D与注释C的比率是多少

C*(插入+更新) 因为D>>C通常是正确的,所以我建议额外更新的成本消失


这对于一个博客来说可能不太重要,但它是一个关键的公式,可以让你知道什么时候你有很多表,需要做出这些决定。

这里回答:@BenV:MySQL还没有实现views@OMG:是的,但是读写的讨论仍然适用。@BenV-我的问题与那个问题有点不同,我不必预先计算任何内容,计算是通过SQL COUNT查询完成的。所以我想知道哪个更好用。
SELECT COUNT(*)
  FROM comments 
 WHERE post_id = $id