2009-10-23 71 views
1

现在我有一张照片表。我预计这张桌子会受到很多打击。例如,如果我把它分成3个表格,例如,如果我有3种不同类型的照片,我会提高性能吗?或者这不会提高性能?如果经常打到1张桌子,我应该打破1张桌子吗?

+3

什么样的表? Html表格? Lua桌子?餐桌? – 2009-10-23 13:22:43

+0

如果您请求特定类型的照片,它会提高性能。如果你有三千万行要查询,并且你返回1000万这种类型的数据就没关系。如果你可以只返回一个表中的所有行并删除where子句,则这更快。您真的必须考虑可能出现的其他问题,例如您希望为特定用户提供所有照片。您需要3个查询,3个结果集并且必须编译它们。你可以使用联合,但只有当所有的列都是相同的,那么你会争辩再次存储在一个表中。 Catch 22:D – Robert 2009-10-23 13:30:46

+0

如果不知道你所在的平台是什么,就不可能说出来,并且更多地表达“type”的含义。同样重要的是,您是否将照片以二进制格式存储在表格中,或者只是指向文件的指针。 如果没有这个说法很难说,但它不太可能有很大的好处。 – 2009-10-23 13:40:57

回答

1

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

不会提高性能,但是,将

  • 一场噩梦管理
  • 会使你写面条代码
  • 将报告或附加的功能调用一个烂摊子

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

0

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

将表分成许多表有助于您获得大量数据并且查询通常使用可分区的密钥。例如,如果您通常按日期范围进行查询,按月分割表可能会有所帮助,因为只能从包含查询范围的表中进行选择来优化查询。但是,有更好的方法通过使用分区而不是分割来分隔表来实现效率。

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

0

我会去一个表的方法与type列,其中包含您的照片类型的typeid或名称。如果您决定对照片类型进行修改(例如,添加新类型将涉及创建新表格.yuck!),那么您的建议意味着要在数据库中添加/删除/修改表格。

1

你不说你正在使用什么类型的数据库。它是SQL关系数据库还是非SQL数据存储之一,例如Hadoop,CouchDB,Redis或Tokyo Cabinet?

对于存储照片,我会选择其中一个非SQL数据存储,而不用担心将不同类型的照片分解到不同的表中。

0

我非常怀疑你的表会被“击中”足够的次数来降低你的数据库性能。我会保持它作为一个表,并按照上面添加“类型”列。你不应该有任何问题。

0

我也有想法将它们放在一个表中并添加一个鉴别器字段。其他人未提及的:向该字段添加索引!

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

作为额外的好处,你可以让一些ORM使用这个鉴别域来在你的代码中进行继承。换句话说,在你的应用程序代码中,你有一个很好的OO继承模型,同时可以在任何数据库后端使用它。