【问题标题】:Database Design: Many tables VS One "long" table _ Performance-Wise?数据库设计:许多表 VS 一个“长”表_性能方面?
【发布时间】:2013-08-24 13:45:59
【问题描述】:

仅从性能的角度来看:

存储 1000 件商品中的 10 件,类别和属性如此之多。将所有属性存储在一个表中更好。或者将它们分类到不同的表中,但在这种情况下,我必须在所有表中搜索某个属性。

另外,如果我使用多个数据库来存储项目怎么办。同样,从性能的角度来看。

【问题讨论】:

  • 我不在乎违反规范化规则,只要它的性能高效
  • 假设所有对象都应该具有相同的属性,将它们存储在一个表中,然后使用indexing 和其他适当的技术来实现最佳性能。如果您人为地将如此小的数据集存储在单独的表中,您最终可能会获得更差的性能(可能会更糟,具体取决于您所做的事情)。而且您应该非常关心规范化 - 如果数据不正确,那么您可以多快检索它并不重要。因此,为了性能而进行的非规范化应该在基准测试之后非常小心地进行。
  • 我实际上所做的是将它们分成具有共同属性的表。例如,我有一张关于“手机”的表格,还有一张关于“笔记本电脑”的表格等等。但事情是这样的,如果我想在“手机”表中添加例如“Galaxy S4”,它会有“16 或 32GB”以及“黑色或白色”的变化,每个组合都有自己的价格,所以我'将最终有 4 行。如果我标准化,我最终会拥有更多表格,如果我将 norm/ 应用于其他类别“笔记本电脑”,我将拥有更多。这就是为什么我尝试 2 避免 norm/.你怎么看?并感谢您的回答
  • 好的,所以它们具有相同的属性。在这种情况下,你必须决定你的系统应该有多动态。在极端情况下,您必须为每组新属性创建一个新表。另一方面,您可以只使用一个表(用于公共属性)加上某种形式的EAV

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


【解决方案1】:

数据库旨在存储和管理数据。数千行被视为“小”表。

您应该将有关属性的所有信息存储在一个表中,假设属性在所有项目中是通用的。使用多个数据库的原因涉及安全或备份要求。

如果您确实获得了非常大的表(例如数千万行)并且性能是一个问题,那么您可以开始学习(垂直)分区。

【讨论】:

  • 太棒了..我问的原因是该网站将涉及大量过滤,这就是我担心性能的原因。恐怕搜索数千行将是大流量的问题。如果它变得很大,我不想在未来进行垂直分区
  • @JohnMark 。 . .您可以使用索引来加快速度。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-10
  • 2013-12-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多