如果频繁遭遇,我应该将1张桌子打破吗?

时间:2009-10-23 13:21:19

标签: sql database-design data-modeling

现在我有一张照片表。我希望这张桌子会受到很大影响。如果我把它分成3个表,如果我有3种不同类型的照片吗?或者这不会改善表现吗?

7 个答案:

答案 0 :(得分:1)

为什么你想把这张桌子分成三种不同类型的桌子,因为照片只是一张照片。听起来你想要一个类别字段,而不是引入额外的表格。

不会提高性能,但

  • 管理的噩梦
  • 会让你写意大利面条代码
  • 会使报告或其他功能调用变得一团糟

例如,假设您选择了路线并创建了三个表格:风景,肖像和娱乐,并将照片加载到这些表格中。添加其他类别后会发生什么,是否要添加另一个表?我希望不是。将它们全部放在一张桌子上。向表中添加索引(pk)。在表格中添加一个类别以对照片进行分类。

答案 1 :(得分:1)

您没有说明您使用的是哪种类型的数据库。它是SQL关系数据库还是非SQL数据存储区之一,如Hadoop,CouchDB,Redis或Tokyo Cabinet?

为了存储照片,我会选择其中一个非SQL数据存储区,而不用担心将不同类型的照片分成不同的表格。

答案 2 :(得分:0)

如果“hit”表示读取,特别是如果读取使用主键查找,请将它们保存在单个表中。

当你拥有大量数据并且你的查询经常使用可以分区的密钥时,将表分解为多个表会有所帮助。例如,如果您通常按日期范围查询,则按月拆分表可能会有所帮助,因为查询可以通过仅从包含查询范围的表中进行选择来进行优化。但是,有更好的方法可以通过使用分区而不是拆分到单独的表来实现效率。

查询的数据越少,读取总是会提高性能,但这对简单的密钥查找没有太大影响。我打赌你在这个表上的查找将是简单的键查找(我可能是错的),如果是这样,请在一个表格中保持简单。

答案 3 :(得分:0)

我会使用type列来保存一个表格方法,该列包含您的照片类型的typeid或名称。如果您决定对照片类型进行修改,您的建议将意味着在数据库中添加/删除/修改表格(例如,添加新类型会涉及创建新表格。哎呀!)。

答案 4 :(得分:0)

我非常怀疑你的桌子会被“击中”足够多次以降低你的数据库性能。我会将它保存为一个表,如上所示添加“类型”列。你不应该有任何问题。

答案 5 :(得分:0)

我也想将它们保存在一个表中并添加一个鉴别器字段。其他人没有提到:为该字段添加索引!

如果(且仅当)您的选择对索引字段进行过滤,性能不会受到太大影响。

作为额外的奖励,您可以让一些ORM使用此鉴别器字段在您的代码中进行继承。换句话说,在您的应用程序代码中,您有一个很好的OO继承模型,同时能够在几乎任何数据库后端上使用它。

答案 6 :(得分:0)

我最初不会这样写。但是,正如许多人所提到的,我会添加一个类别列。这将允许您将来对表进行分区。以下是MySQL中表分区的一些信息。

http://dev.mysql.com/doc/refman/5.1/en/partitioning.html