繁体   English   中英

MySQL中表的垂直分区

[英]Vertical partitioning of tables in MySQL

另一个问题。

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

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

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

过早的优化是...

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

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

另一方面,这样做是否会提高性能充其量是值得怀疑的。 除非你能事先证明(并且用随机数据创建一个 1000 万条记录表并运行一些查询是微不足道的),否则我不会这样做。 Doug Kress 关于封装和避免 SELECT * 的建议是正确的方法。

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

我认为最好将其保留为单个表,但尽可能封装您对数据的访问,以便以后轻松重构。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM