【发布时间】:2011-07-11 20:38:58
【问题描述】:
我有一个“大” MySQL 表,最初包含约 100 列,我最终将其拆分为 5 个单独的表,然后使用 CodeIgniter Active Record 将它们连接起来...
从性能的角度来看,保留原始表的 100 列或将其拆分更好。
每个表大约有 200 行。
【问题讨论】:
标签: mysql optimization join
我有一个“大” MySQL 表,最初包含约 100 列,我最终将其拆分为 5 个单独的表,然后使用 CodeIgniter Active Record 将它们连接起来...
从性能的角度来看,保留原始表的 100 列或将其拆分更好。
每个表大约有 200 行。
【问题讨论】:
标签: mysql optimization join
200 行?这没什么。
如果新表以对您的问题有意义的方式组合列,我会拆分表。我会着眼于normalization。
您听起来好像是为了满足一些未说明的“好”标准,或者因为您目前的表现不可接受。您是否有一些数据表明由您的架构引起的性能问题?如果没有,我建议重新考虑这种方法。
没有人能说会对性能产生什么影响。更多的 JOIN 在你查询的时候可能会比较慢,但是你没有说你的用例是什么。
【讨论】:
重要的是 - 您可以(以及它的好风格!)将包含临时数据的列移动到单独的表中。您可以将可选列移动到单独的表中(这取决于逻辑)。
在制作数据库时,最重要的是:每个表都应该包含一些本质。您最好创建更多表,但将不同的本质分成不同的表。唯一的例外是当您必须优化您的软件时,因为“直接”的逻辑解决方案运行缓慢。
如果你处理一些非常复杂的模型,你应该把它分成几个具有简单关系的简单块——这也适用于数据库设计。
至于性能 - 当然,一张表应该提供更好的性能,因为您不需要任何类型的连接和键来访问所有数据。更少的关系 - 更少的滞后。
【讨论】:
所以您已经进行了更改,现在您要问我们是否知道您的架构的哪个版本更快?
(如果答案是拆分表,那么你做错了什么)。
合并表不仅应该更快,它还应该需要更少的代码,因此不太可能出现错误。
您没有提供有关数据结构的任何信息。
您的数据库中有 200 行,性能是您最不需要担心的事情。
【讨论】:
您所指的概念称为垂直分区,它会对性能产生惊人的影响。在Mysql.com Performance Post 上,他们特别讨论了这个问题。文章摘录:
虽然你必须做垂直 手动分区,你可以受益 从某些实践中 情况。例如,假设 你通常不需要参考 或使用中定义的 VARCHAR 列 我们之前显示的分区 表。
【讨论】: