PHP / MySQL性能建议


PHP / MySQL Performance Suggestion

我有一个保存表(2)的总记录值的表(1)。我这样做是为了能够快速地向用户显示总价值,而不必在每次打开页面时运行select count。

我的问题:

我正在讨论是否在新记录进入时更新表(1)中的总记录值,或者每5分钟运行一个脚本来更新表(1)中的总记录值。

问题是我们计划在一天内创建许多记录,这将导致每个记录的额外更新。

然而,如果我们做一个脚本,它将需要运行表(1)中的每条记录,更新查询将有一个子查询计数表(2)中的记录。这个脚本需要每5到10分钟运行一次,以保持同步。

表(1)不会快速增长,可能在峰值时可以达到大约5000条记录。表(2)有可能在短时间内获得超过100万条记录。

希望听到一些建议

这就是表2上的触发器可能有用的地方,自动更新表1作为同一事务的一部分,而不是使用PHP发起的第二个查询。这仍然是一个轻微的开销,但是由数据库本身处理,而不是PHP代码中的更大开销,并且acid地维护表1计数的准确性(假设您使用事务)

myisam和innodb引擎是有区别的。如果您需要计算表COUNT(*) FROM table中的总行数,那么如果使用myisam,无论表的大小如何,您都会非常快地获得这个数字(myisam表已经存储了行数,因此它只是读取它)。

Innodb不存储这些信息。但是如果一个近似的行数是足够的,则可以使用SHOW TABLE STATUS

如果你需要基于某些东西计数,COUNT(*) FROM table WHERE ...那么有两个不同的选择:

  • 或者在某个东西上放一个索引,计数会很快
  • 使用触发器/应用逻辑自动更新其他表中的字段