在数据库中存储以逗号分隔的列表会占用大量内存空间吗?

时间:2012-03-22 07:28:21

标签: mysql sql

我们正在开发一个具有一些产品属性设计的项目。我不认为以逗号分隔保存属性是一种好习惯。但我的朋友告诉我,以逗号分隔的列表将节省空间。

我在stackoverlow Is storing a delimited list in a database column really that bad?

中阅读了这篇文章

但是没有人提到内存问题,所有人都赞扬保留单独的记录。有谁能告诉我真实的故事?

3 个答案:

答案 0 :(得分:4)

没有基于空间的理由。通过标准化,数据的大小实际上可以更小,因为您不需要在数据中添加额外的字符(逗号或用于分离的任何内容)。

你的朋友可能只是担心必须编写涉及连接表的“复杂”查询,并试图找到它的理由(而不是成功)。

除此之外,已经有足够的文章说明了为什么要对数据进行规范化。

答案 1 :(得分:2)

比尔在相关问题中的回答非常清楚地涵盖了这些问题。以这种非标准化形式存储数据几乎没有任何实际好处。使用多值字段会花费你很长时间,也可能是短期的。

如果您100%确定您的应用程序永远不需要处理(过滤,排序,分组等)序列化数据(逗号分隔列表)的内容,那么它将对您的应用程序没有任何影响。在人们做出这种假设的大多数情况下,随着应用程序的要求随着时间的推移而变化,他们“会被烧焦”。

处理多值字段将需要更多内存和更多CPU周期,因为除了简单地读取字段内容之外,还需要进行全表扫描。谷歌搜索“mysql多值字段性能问题”返回许多结果。

答案 2 :(得分:-1)

是的,与创建新表相比,它肯定会节省空间。但是,以这种方式保存数据并不是一种好的做法。就创建新表而言,我认为它可能不会影响很多。您可以专注于其他领域,例如在桌面上创建适当的索引等。