【问题标题】:database performance: how do more columns in a table impact design / development / performance [closed]数据库性能:表中的更多列如何影响设计/开发/性能[关闭]
【发布时间】:2014-08-01 11:51:41
【问题描述】:

我有一个程序可以捕获许多不同类型的结构化消息。我需要将消息持久化到数据库。论坛对设计和性能的看法是什么:

(a) 为所有消息类型使用一个大表,因此为了处理任何新的消息类型,新列被添加到大表中。所以数据库是一张可能有 100 列的表。

(b) 为每种消息类型使用一个表,因此对于新的消息类型,将一个新表添加到数据库中

我所说的性能是指搜索所有消息(即搜索一个表而不是搜索连接的表)以及开发工作(即开发人员之间的知识转移)和维护(即出现问题时)。

这听起来有点像规范化,但我不确定。

谢谢!

【问题讨论】:

  • 您似乎在征求意见。如果你有两种不同的数据布局和一组你想做的查询和操作,那么这个问题就更合理了。
  • 您应该考虑是否希望将消息从逻辑上分离到不同的表中,因为它们具有不同的结构;或者如果您希望出于性能考虑将消息物理地分离到同一个表中的不同分区中。
  • 您的标签之一是关系数据库。这比您建议的任何一个都好。如果你不确定我为什么要说这样的话,我听说过这本书的好东西,数据库设计为凡人。

标签: mysql sql database-design relational-database database-schema


【解决方案1】:

如果我没看错,选项 (a) 相当于所谓的“一个真正的查找表”(OTLT)。 OTLT 是一种反模式。你可以在网上研究一下。

性能下降是因为必须对两个字段(类型和代码)进行查找。每种类型都有单独的表,查找只是在代码上。

查询更复杂,因此更容易出错。

如果您想为每种类型单独输入表格,则数据管理会更加困难。如果您将只有一个真实类型的输入表单,则在输入新的查找值时需要小心。祝你好运。

【讨论】:

  • 是的,使用单独的表我们可以获得更好的性能,因为我们不需要类型查找。谢谢...我一直在阅读dbforums.com/database-concepts-design/…
  • 我还知道读取数据要复杂得多。比如不能取select * data的游标,必须引用每一列。
猜你喜欢
  • 2010-09-12
  • 1970-01-01
  • 2016-04-22
  • 2011-07-07
  • 2021-04-18
  • 2010-09-22
  • 1970-01-01
  • 1970-01-01
  • 2014-09-24
相关资源
最近更新 更多