MySQL-1个包含100列的大表或拆分为5个表并连接

MySQL-1个包含100列的大表或拆分为5个表并连接,mysql,optimization,join,Mysql,Optimization,Join,我有一个“大”MySQL表,最初包含约100列,最后我将其拆分为5个单独的表,然后用CodeIgniter Active Record将它们连接起来 从性能的角度来看,最好是将原始表保留为100列,还是将其拆分 每个表大约有200行。200行?没什么 如果新表以一种对您的问题有意义的方式组合列,我将拆分表。我做这件事时会着眼于未来 你听起来像是为了满足一些未说明的“善良”标准,或者是因为你目前的表现不可接受。您是否有一些数据表明您的模式导致了性能问题?如果不是,我建议重新考虑这种方法 没有人能说

我有一个“大”MySQL表,最初包含约100列,最后我将其拆分为5个单独的表,然后用CodeIgniter Active Record将它们连接起来

从性能的角度来看,最好是将原始表保留为100列,还是将其拆分


每个表大约有200行。

200行?没什么

如果新表以一种对您的问题有意义的方式组合列,我将拆分表。我做这件事时会着眼于未来

你听起来像是为了满足一些未说明的“善良”标准,或者是因为你目前的表现不可接受。您是否有一些数据表明您的模式导致了性能问题?如果不是,我建议重新考虑这种方法


没有人能说出对性能的影响。当您查询时,更多的联接可能会变慢,但您并没有说明您的用例是什么。

重要的是,您可以(及其良好的样式!)将包含临时数据的列移动到单独的表中。您可以将可选列移动到单独的表中(这取决于逻辑)

在创建数据库时,最重要的是:每个表都应该包含一些精华。您最好创建更多的表,但将不同的精华分离到不同的表中。唯一的例外是当您必须优化软件时,因为“直接”逻辑解决方案工作缓慢

如果你处理一些非常复杂的模型,你应该把它分成几个简单的块和简单的关系——这也适用于数据库设计


至于性能-当然,一个表应该提供更好的性能,因为您不需要任何类型的连接和键来访问所有数据。更少的关系-更少的滞后

您已经做了更改,现在您问我们是否知道您的模式的哪个版本运行得更快

(如果答案是拆分表,那么您做错了事情)

整合表不仅应该更快,还应该需要更少的代码,因此不太可能有bug

您尚未提供有关数据结构的任何信息


数据库中有200行,性能是最不需要担心的。

您所指的概念称为垂直分区,它会对性能产生令人惊讶的影响。一开始,他们特别讨论了这一点。文章节选:

虽然你必须做垂直运动 手动分区,您可以从中受益 从某些方面的实践来看 情况。比如说 你通常不需要参考 或者使用中定义的VARCHAR列 我们之前展示的是分区的 桌子


标准化不是偶数,只是为了避免一个表包含100多列。。。性能似乎丝毫没有落后,因为只有约200行。。。从速度/优化/最佳实践的角度来看,最好是将em保留在一个表中还是全部拆分?谢谢你的回复。。。在表中,99%的字段包含数据(VARCHAR),在大约200行时,它很小,但我只是想从速度/最佳实践的角度来看:1个表包含100列或5个表包含20列。。。我想我只是增加了连接的开销,以保持表中的列数较低……200行的速度根本不是问题,除非您在Atari 800上运行此功能。整个表将放入内存,任何性能差异都将难以测量。是的,我做了更改,很难找到明确的答案,因为有些人说在30列中拆分,表之间的关系为1:1,其他人说保留在1表中,因为速度更快。。。我知道连接会减慢速度,99%的字段已满。现在是200,但它正在测试中,并且会增长。。。我知道无论哪种方式200都会很快,但从最好的设计角度来看,什么是最好的方式?谢谢