计算项目或递增数字?

时间:2011-07-31 23:41:43

标签: php mysql sql aggregate-functions

从经验比我自己的人那里,简单地计算表格中的项目数量(例如计算某个类别中的主题数量)或保留一个包含该值的变量是一个更好的主意递增并调用它(类别表中的一个额外字段)?

这两者之间是否存在显着差异,或者只是非常轻微,即使它很轻微,一种方法仍然会比另一种方法更好吗?这不适用于任何一个特定的项目,所以请一般回答(如果这有意义),而不是基于用户数量等。

谢谢。

4 个答案:

答案 0 :(得分:4)

要获取项目数(表中的行数),您需要使用标准SQL并按需执行

SELECT COUNT(*) FROM MyTable

注意,如果我遗漏了某些内容,表中的每个项目(行)都有一些唯一的标识符,无论是部件号,部分代码还是自动增量。因此,添加新行可能会触发列的“自动增量”。

这与“计数行”无关。由于DELETE或ROLLBACK,数字可能不连续。

尝试单独维护行数将以眼泪和/或灾难告终。尝试使用COUNT(*)+ 1或MAX(id)+1来生成新的行标识符更糟糕

答案 1 :(得分:1)

我认为你的问题有些混乱。我的解释是,您是想要select count(*)还是要跟踪实际数量的列。

如果您没有理由这样做,我不会添加这样的专栏。这是过早的优化,使您的软件设计复杂化。

此外,您希望避免将相同的信息存储在不同的地方。计数是一项微不足道的任务,所以你实际上是在复制信息,这是一个坏主意。

答案 2 :(得分:0)

在我的论坛中,我在这样的论坛中计算子线程:

SELECT COUNT(forumid) AS count FROM forumtable

只要您使用相同的标识符来指定哪个论坛和/或子部分,并且该列具有索引键,它就会非常快。因此,没有理由添加超出您需要的列。

答案 3 :(得分:0)

我只是算数。如果您发现性能问题,可以考虑其他选项,但只要保持一个独立的值,就必须做一些工作以确保它始终正确。使用COUNT()你总能得到“直接从马的口中”的实际数字。

基本上,在必要之前不要开始优化。如果使用COUNT()一切正常而快速,那么就这样做吧。否则,将计数存储在某处,但不是添加/减去更新存储的值,而是在需要时运行COUNT()以获取新的项目数