php count vs sql count vs count field?表演

时间:2013-07-25 20:46:45

标签: php sql database performance scalability

我感谢你的时间。

您能否与我分享您对元素数量的经验?

第一种方法 - 将元素作为数组存储在一个数据库字段中,并在一次读取后使用服务端语言进行计数。

first approach

第二种方法 - 在字段中传播数组并使用SQL COUNT(2个表)计算字段数。

enter image description here enter image description here

第三种方法 - 在数据库中存储一个字段,该字段包含要计数的元素总和的未更新值。

enter image description here

哪些approches将更快地执行,并且易于扩展。

1 个答案:

答案 0 :(得分:3)

将元素作为数组存储在一个数据库字段中,并在一次读取后使用服务端语言进行计数。

这个糟糕坏了。从设计的角度来看,它不仅很糟糕,而且每次想要计算时,都必须有效地返回所有元素。数据库花费更长的时间读取实际文件页面,以及将数据更长时间发送回客户端。一旦它在客户端,你需要解析它,然后得到计数。全部采取,这可能是FAR较慢,是一个更糟糕的设计。

在字段中传播数组并使用SQL COUNT计算字段数。

三者的最佳选择,如果修改。您不希望将数组扩展为字段。你真的想把它作为行传播出去。你想要一对多的关系表。这允许数据库做它擅长的事情,只访问最少量的所需信息,并且最后只返回一个数字。这里每个人的工作都少得多。

在数据库中存储一个字段,其中包含要重新计算的元素总和的未更新值。

这可能意味着两件事。首先,每次插入/删除时都有一个手动更新的字段。这会很糟糕,因为它很容易忘记,为什么呢?虽然这可能是所有选项中性能最高的,但也会增加风险。第二种方法是让计算列存储计数。这允许SQL服务器为您跟踪它,并且可以是使查询更容易的合理选项,但如果您抓住整行,否则可能会对您不希望计数的性能产生负面影响。总的来说,其中第二个并不坏,但是当它真的很好的时候情况非常好。