【发布时间】:2014-11-23 16:30:33
【问题描述】:
我有一个创建日志的程序,这些日志用于计算每个客户的余额、趋势等。目前,我将所有内容存储在单独的 MYSQL 表中。我通过加入这两个表将所有日志链接到特定客户端。当我访问客户端时,它会从 log_table 中提取所有日志并生成报告。该报告会因使用的过滤器而异,主要是针对特定日期和类别。
我担心的是我的程序的性能,因为我们积累了更多的日志和客户端。我的直觉告诉我将日志信息以序列化数组的形式存储在 user_table 中,因此整个会话只使用一个查询。然后,我可以获取该日志数组并使用 PHP 对其进行过滤,与以前一样,它在 MYSQL 查询中进行过滤(使用多种方法,例如 BETWEEN 用于日期和其他比较)。
我的问题是,如果我使用序列化数组来存储日志而不是使用 MYSQL 表来存储每个单独的日志,您认为性能会提高吗?我们估计每个客户端大约有 500-1000 个日志,其中大约有 50000 个客户端(并且还在增长)。
【问题讨论】:
-
您意识到您可以使用单个 SQL 查询检索多个数据库表的一行......问题是您正在使用多个表,而您应该使用单个表
-
我不确定我是否理解。在这种情况下,我使用两个表,client_table 和 log_table。 client_table 有一个 ID,用于将每个单独的日志链接到相应的客户端。我希望这是有道理的。
-
我想我误解了....我以为您为每个客户使用单独的日志表
-
但是,如果您不采用序列化数据的方法,并在 PHP 中进行所有过滤,性能将迅速下降...... SQL 查询中的过滤正在使用正确的工具来完成这项工作,因为只要你的表被合理索引
-
两张表有什么索引?您现在使用什么查询来检索日志数据?该查询的 EXPLAIN 显示了什么?
标签: php mysql arrays performance