3

另一个问题。

是宽表更好vertically partition(在我的例子中,我正在考虑将登录详细信息从用户的地址、个人等详细信息中拆分出来)design stage还是更好地保留它并在获得一些数据并执行之后对其进行分区profiling

答案似乎很明显,但我担心行拆分表有时将意味着重写用户模型的额外工作+将经常访问的登录详细信息与更多静态个人详细信息拆分似乎是合理的。

任何人都对如何进行有一些经验支持的建议:)?提前致谢。

4

2 回答 2

2

过早的优化是...

将列拆分到不同的表有缺点:

  • 一些需要单个查询的操作现在需要两个查询或一个连接
  • 强制每个表中的每一行都需要在另一个表中具有相应的行并非易事。因此,您可能会面临完整性问题

另一方面,最好的情况是这样做是否会提高性能。除非您可以事先证明(并且创建一个包含随机数据的 1000 万条记录表并运行一些查询是微不足道的),否则我不会这样做。Doug Kress 关于封装和避免 SELECT * 的建议是正确的方法。

这样做的唯一原因是如果您的单表设计未规范化并且规范化意味着分解表。

于 2011-08-18T19:16:55.497 回答
1

我相信还是把它保留为一个单独的表会更好,但要尽可能地封装你对数据的访问,这样以后可以很容易地重构。

当您访问数据时,请确保只收集查询中需要的信息(避免使用“SELECT *”)。

话虽如此,请确保与表一起保存的数据已适当规范化。例如,您可能会发现您想为一个用户存储多个地址——在这种情况下,您应该将它放在一个单独的表中。

于 2011-08-18T19:05:02.047 回答