处理序列化数据与添加更多字段 - php - mysql

时间:2011-01-25 14:11:53

标签: php mysql performance serialization

好吧,让我假装我有五十条信息要存储在一张桌子的每张记录中。当我把数据拉出来的时候,我将会对其中的一些进行基本数学运算。在任何给定的页面请求中,我将提取一百条记录并进行计算。

对性能的影响是什么:

- 将数据作为序列化数组存储在单个字段中,并在php中进行处理

VS

B - 将数据存储为五十个数字字段并让mysql做一些总和和avgs而不是

请假设规范化在这50个字段中不是问题。 请假设我不需要按任何这些字段排序。

提前感谢!

4 个答案:

答案 0 :(得分:3)

首先,我永远不会存储数据serialized,它只是不够便携。也许在JSON编码的字段中,但不是序列化的。

其次,如果您正在对数据进行任何操作(搜索,聚合等),请在表格中添加列。我的意思是任何事情(排序等)。

在列中存储格式化数据(序列化,json等)的唯一时间是它是否只读。这意味着你没有对它进行排序,你没有在where子句中使用它,你没有聚合数据等。

数据库服务器在执行基于集合的操作方面非常有效。因此,如果您正在进行任何类型的聚合(求和等),请在MySQL中进行。它会比你让PHP更有效率......

答案 1 :(得分:2)

MySQL几乎肯定会比PHP更快地进行这些计算。

答案 2 :(得分:1)

虽然我几乎始终推荐选项B,但我自己遇到了一个独特的情况,即将序列化存储到文本字段可能更有意义。

我的客户在他们的网站上有申请表。表格上有大约50个字段,所有数据只能是只读的。

此外,此应用程序可能会随时间而变化。可以添加字段,可以删除字段。通过使用序列化数据,我可以以序列化格式保存所有问题和答案。如果表单发生变化,旧数据将与原始问题保持一致。

答案 3 :(得分:1)

我和乔纳森一起去!如果你有一个表,其中字段的数量会根据用户的选项或内容而有所不同,并且这些字段既不会聚合也不会计算,我会序列化(和base64_encode)或json_encode这些值。

Joomla和Wordpress也这样做。 Typo3有一些有很多很多列的表,这有点难看: - )