如何在mysql中存储这些字段描述?

时间:2011-01-20 19:20:04

标签: mysql data-storage

为长篇主题道歉,我并不打算这么长,但这是一个非常简单的问题。 :)

假设您有一个名为tags的简单表,其中包含tag_id列和tag列。 tag_id只是一个自动增量列,标签是标签的标题。如果我需要添加一个描述字段,平均大约1-2个段落(最多可能大约3-4个段落),我应该简单地向表中添加一个描述字段,还是应该创建一个名为tag_descriptions和store的新表tag_id的描述?

我记得读过这样做更好,因为如果你做了一个不选择描述的查询,那个描述字段仍然会减慢mysql的速度。这是真的?我甚至不记得我从哪里读过,但是我已经有几年跟着它了...最后我怀疑我是否需要这样做,我有一种感觉我没有。每当需要描述字段时,您还需要内部联接。

我遇到的另一个问题是,创建新表只能在最多只能容纳几行时通常会很糟糕吗?如果这些数据不适合其他地方怎么办?

下面我有一个简单的案例,涉及这两个问题。

我有三个表内容,标签和content_tags构成了多对多的关系:

内容

  • CONTENT_ID
  • region(enum column with 约6-7个不同的值和大多数 可能不会在以后增长)

代码

  • TAG_ID
  • 标签

content_tags

  • CONTENT_ID
  • TAG_ID

我想为每个标签存储大约1-2个段落的描述,但也为每个区域存储。我想知道最好的方法是什么?

选项A:

  • 只需添加说明列即可 标签表
  • 为...创建新表 region_descriptions

选项B:

  • 创建一个名为的新表 字段描述:id, 说明和类型
  • id将是内容的id或 枚举字段的ID
  • 类型是否是标签 描述或区域描述 (将使用枚举列)

也许在id和type上有一个主键?

选项C:

  • 为tag_descriptions创建一个新表
  • 为region_descriptions创建一个新表

如果添加描述列不会减慢不需要描述的mysql选择查询,则选项A似乎是一个不错的选择。

假设描述列会减慢mysql的速度,选项B可能是个不错的选择。它还消除了对只有6-7行的小表的需要,这些行可以保存区域描述。虽然现在我想到了它,如果最初获得区域描述你连接到这个表是否会很慢,你只需要通过很少的行。

如果描述列会减慢mysql的速度,并且像区域描述这样的小表无关紧要,那么选项C将是理想的。

也许这些选项都不是最好的,随意提供另一种选择。感谢。

P.S。什么是理想的列类型用于保存通常1-2段的数据,但有时可能会更多一些?

3 个答案:

答案 0 :(得分:0)

在我的(公认的有些不知情的)意见中,这实际上取决于你将使用它们多少。

如果索引正确,那JOIN不应该非常昂贵。此外,更大的表格会更慢。它禁止缓存,并且访问内容需要更长时间,尽管索引可以严重缓解这个问题。

如果您要将标签名称加入标签ID很多,而且很少会使用这些说明,我会说使用单独的表格。如果您将更频繁地使用这些说明,请使用一个表格。

答案 1 :(得分:0)

对于问题的第一部分:如果您的标签带有ID,名称和说明,则应将其保存在1个表格中。

现在,这个查询

 SELECT name FROM tags WHERE id = 1;
如果你有1个,2个或20个额外字段,

不会减速。

答案 2 :(得分:0)

如果您每分钟不处理数千个查询,我认为这并不重要。如果您每分钟要进行多次查询,那么我将实施各种选项并为所有这些选项执行基准测试。根据结果​​,您可以做出决定。