为长篇主题道歉,我并不打算这么长,但这是一个非常简单的问题。 :)
假设您有一个名为tags
的简单表,其中包含tag_id
列和tag
列。 tag_id只是一个自动增量列,标签是标签的标题。如果我需要添加一个描述字段,平均大约1-2个段落(最多可能大约3-4个段落),我应该简单地向表中添加一个描述字段,还是应该创建一个名为tag_descriptions和store的新表tag_id的描述?
我记得读过这样做更好,因为如果你做了一个不选择描述的查询,那个描述字段仍然会减慢mysql的速度。这是真的?我甚至不记得我从哪里读过,但是我已经有几年跟着它了...最后我怀疑我是否需要这样做,我有一种感觉我没有。每当需要描述字段时,您还需要内部联接。
我遇到的另一个问题是,创建新表只能在最多只能容纳几行时通常会很糟糕吗?如果这些数据不适合其他地方怎么办?
下面我有一个简单的案例,涉及这两个问题。
我有三个表内容,标签和content_tags构成了多对多的关系:
内容
代码
content_tags
我想为每个标签存储大约1-2个段落的描述,但也为每个区域存储。我想知道最好的方法是什么?
选项A:
选项B:
也许在id和type上有一个主键?
选项C:
如果添加描述列不会减慢不需要描述的mysql选择查询,则选项A似乎是一个不错的选择。
假设描述列会减慢mysql的速度,选项B可能是个不错的选择。它还消除了对只有6-7行的小表的需要,这些行可以保存区域描述。虽然现在我想到了它,如果最初获得区域描述你连接到这个表是否会很慢,你只需要通过很少的行。
如果描述列会减慢mysql的速度,并且像区域描述这样的小表无关紧要,那么选项C将是理想的。
也许这些选项都不是最好的,随意提供另一种选择。感谢。
P.S。什么是理想的列类型用于保存通常1-2段的数据,但有时可能会更多一些?
答案 0 :(得分:0)
在我的(公认的有些不知情的)意见中,这实际上取决于你将使用它们多少。
如果索引正确,那JOIN不应该非常昂贵。此外,更大的表格会更慢。它禁止缓存,并且访问内容需要更长时间,尽管索引可以严重缓解这个问题。
如果您要将标签名称加入标签ID很多,而且很少会使用这些说明,我会说使用单独的表格。如果您将更频繁地使用这些说明,请使用一个表格。
答案 1 :(得分:0)
对于问题的第一部分:如果您的标签带有ID,名称和说明,则应将其保存在1个表格中。
现在,这个查询
SELECT name FROM tags WHERE id = 1;
如果你有1个,2个或20个额外字段,不会减速。
答案 2 :(得分:0)
如果您每分钟不处理数千个查询,我认为这并不重要。如果您每分钟要进行多次查询,那么我将实施各种选项并为所有这些选项执行基准测试。根据结果,您可以做出决定。