MySQL CONCAT没有阅读

时间:2016-11-02 11:32:53

标签: mysql performance concatenation

我有一个包含MEDIUMTEXT字段的表,用于存储日志 我按如下方式将数据添加到日志中:

UPDATE tbl SET log = CONCAT(log, 'newtext')

对于短日志,它可以正常工作,但随着时间的推移,随着日志字段变大,它会以指数方式减慢速度。似乎MySQL读取整个字段,然后将整个事情写回来。

如何在不出现性能问题的情况下将数据添加到日志中?如果无法实现这一目标,我该如何存储和更新如此大量的文本数据呢?

1 个答案:

答案 0 :(得分:1)

如果你考虑一下,很明显引擎会:

1 - Retrieve the existing value of `log`,
2 - Concatenate the retrieved value with the new one,
3 - Store the result of "2" back in the same row.

(实际上,它以简短的形式执行)

因为(我在这里猜测)你想要检查日志(这将发生的频率比添加信息的频率低得多),你需要整个连接 ,我会建议将信息存储在单独的记录中(使用与您要收集日志的特定ITEM对应的键列),并仅在需要时进行连接(提取)。

您甚至可以通过使用DIGEST表来存储临时连接(即在提取时创建)以及摘要中包含的最后一个条目的索引来增强此功能。然后,每当您想要查看项目的“完整故事”时,您将首先提取消化后的文本,然后追加记录最后一个消化值之后注册的内容(当然,最新完全更新DIGEST表)连接结果)。