Php 计算项目还是增加一个数字?

Php 计算项目还是增加一个数字?,php,mysql,sql,aggregate-functions,Php,Mysql,Sql,Aggregate Functions,对于比我更有经验的人来说,简单地计算一个表中的项目数(例如计算一个类别中的主题数)或者保留一个保存该值的变量,然后递增并调用它(类别表中的一个额外字段)是更好的主意吗 这两种方法之间是否存在显著差异,或者只是非常微小,即使微小,一种方法是否仍比另一种方法更好?这不是针对任何一个特定的项目,所以请一般地回答(如果有意义的话),而不是基于用户数量之类的东西 谢谢。在我的论坛中,我计算了如下论坛中的子线程: SELECT COUNT(forumid) AS count FROM forumtable

对于比我更有经验的人来说,简单地计算一个表中的项目数(例如计算一个类别中的主题数)或者保留一个保存该值的变量,然后递增并调用它(类别表中的一个额外字段)是更好的主意吗

这两种方法之间是否存在显著差异,或者只是非常微小,即使微小,一种方法是否仍比另一种方法更好?这不是针对任何一个特定的项目,所以请一般地回答(如果有意义的话),而不是基于用户数量之类的东西


谢谢。

在我的论坛中,我计算了如下论坛中的子线程:

SELECT COUNT(forumid) AS count FROM forumtable

只要您使用相同的标识符来指定论坛和/或子分区,并且该列具有索引键,那么速度就非常快。因此,没有理由添加比您需要的更多的专栏。

在我的论坛中,我计算了如下论坛中的子线程:

SELECT COUNT(forumid) AS count FROM forumtable

只要您使用相同的标识符来指定论坛和/或子分区,并且该列具有索引键,那么速度就非常快。因此,没有理由添加比您需要的更多的列。

要获得项目数(表中的行),您可以使用标准SQL并按需添加

SELECT COUNT(*) FROM MyTable
注意,如果我遗漏了什么,表中的每个项目(行)都有一些唯一的标识符,无论是零件号、代码还是自动递增。因此,添加新行可能会触发列的“自动增量”

这与“数行”无关。由于删除或回滚,数字可能不连续


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

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

SELECT COUNT(*) FROM MyTable
注意,如果我遗漏了什么,表中的每个项目(行)都有一些唯一的标识符,无论是零件号、代码还是自动递增。因此,添加新行可能会触发列的“自动增量”

这与“数行”无关。由于删除或回滚,数字可能不连续


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

我认为您的问题有些混乱。我的解释是,您是要执行
选择计数(*)
还是要执行跟踪实际计数的列

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


此外,您希望避免将相同的信息存储在不同的位置。计数是一项琐碎的任务,所以你实际上复制了信息,这是一个坏主意。

我认为你的问题有些混乱。我的解释是,您是要执行
选择计数(*)
还是要执行跟踪实际计数的列

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


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

我只想计数。如果你注意到一个性能问题,你可以考虑其他选项,但是一旦你保持一个单独的值,你就必须做一些工作来确保它总是正确的。使用
COUNT()
可以说,你总是“直接从马嘴里”得到实际的数字


基本上,不要开始优化,直到你不得不这样做。如果使用
COUNT()
,一切都能正常快速地工作,那么就这样做。否则,将计数存储在某个位置,而不是通过加/减来更新存储的值,在需要时运行
count()
,以获取新的项数

我只需要计数。如果你注意到一个性能问题,你可以考虑其他选项,但是一旦你保持一个单独的值,你就必须做一些工作来确保它总是正确的。使用
COUNT()
可以说,你总是“直接从马嘴里”得到实际的数字


基本上,不要开始优化,直到你不得不这样做。如果使用
COUNT()
,一切都能正常快速地工作,那么就这样做。否则,将计数存储在某个位置,而不是通过加/减来更新存储的值,需要时运行
count()
,以获取新的项数

我想他想计算表中的元素。.自动增量不适合这一点。是的,我比较了计算表中的项数和将数字存储为字段,例如,在论坛类别的表格中,将论坛中创建的主题数作为一个字段来计算,而不是每次查看统计数据时都重新计算。哦,在我看来,他似乎在试图计算表格中的行数,以便提供一个id来添加一个。那么让我调整一下我的答案。我想他想计算表中的元素。自动递增不适合这样做。是的,我比较了计算表中的项目数和将数字存储为字段,例如,在论坛类别的表格中,将论坛中创建的主题数作为一个字段来计算,而不是每次查看统计数据时都重新计算。哦,在我看来,他似乎在试图计算表格中的行数,以便提供一个id来添加一个。那么让我调整一下我的答案。既然您仍然需要执行DB查询来获取值,那么不妨立即获取值。再说一次,计算行数可能是最简单的查询之一,而且一定会很快(比得到一个直接的值更快)。@Christian Sciberras:不使用计数的代价是单独维护计数的并发性问题……我尽量避免使用通配符