【问题标题】:MySQL - 1 large table with 100 columns OR split into 5 tables and JOINMySQL - 1 个包含 100 列的大表或拆分为 5 个表并加入
【发布时间】:2011-07-11 20:38:58
【问题描述】:

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

从性能的角度来看,保留原始表的 100 列或将其拆分更好。

每个表大约有 200 行。

【问题讨论】:

    标签: mysql optimization join


    【解决方案1】:

    200 行?这没什么。

    如果新表以对您的问题有意义的方式组合列,我会拆分表。我会着眼于normalization

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

    没有人能说会对性能产生什么影响。更多的 JOIN 在你查询的时候可能会比较慢,但是你没有说你的用例是什么。

    【讨论】:

      【解决方案2】:

      重要的是 - 您可以(以及它的好风格!)将包含临时数据的列移动到单独的表中。您可以将可选列移动到单独的表中(这取决于逻辑)。

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

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

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

      【讨论】:

      • 这甚至不是为了规范化,只是为了避免一个包含 100 个奇数列的表......性能似乎没有任何滞后,因为只有 ~200 行......来自速度/优化/最佳实践 POV 是最好保留在单个表中还是将它们全部拆分? stackoverflow.com/questions/3913911/…
      • 感谢您的回复...在表中 99% 的字段包含数据 (VARCHAR),并且在大约 200 行时它很小,但我只是想从速度/最佳实践的角度来看: 1 个有 100 列的表或 5 个有 20 列的表......我想我只是为了保持表中的列数量低而增加了连接开销......
      • 速度对于 200 行来说根本不是问题,除非您在 Atari 800 上运行它。整个表将适合内存,任何性能差异都将难以衡量。
      【解决方案3】:

      所以您已经进行了更改,现在您要问我们是否知道您的架构的哪个版本更快?

      (如果答案是拆分表,那么你做错了什么)。

      合并表不仅应该更快,它还应该需要更少的代码,因此不太可能出现错误。

      您没有提供有关数据结构的任何信息。

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

      【讨论】:

      • 是的,我进行了更改,但很难找到明确的答案,因为有些人说拆分为 30 列,表之间的关系为 1:1,另一些人说保留 1 个表 cos 更快...我知道 JOINS 应该减慢速度,并且 99% 的字段已满。现在有 200 个,但它正在测试中并且会增长......我知道 200 个会很快,但是从最佳设计 POV 来看,最好的方法是什么?谢谢
      【解决方案4】:

      您所指的概念称为垂直分区,它会对性能产生惊人的影响。在Mysql.com Performance Post 上,他们特别讨论了这个问题。文章摘录:

      虽然你必须做垂直 手动分区,你可以受益 从某些实践中 情况。例如,假设 你通常不需要参考 或使用中定义的 VARCHAR 列 我们之前显示的分区 表。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-03-15
        • 2018-04-11
        • 1970-01-01
        • 2012-12-16
        相关资源
        最近更新 更多