【问题标题】:Is it better in MySQL to have 1 large table or 2 smaller tables?在 MySQL 中有 1 个大表还是 2 个小表更好?
【发布时间】:2009-10-19 03:56:21
【问题描述】:

这是我的情况:我需要为 1 条记录存储大约 50 个不同的数据字段(没有一个是相同的或重复的)。大约 15 个字段是我通常需要在查询中使用的字段,而其余字段是偶尔使用的(约 40% 的查询)。

我是否应该设置 2 个表,一个包含常见字段,另一个包含不太常见的字段,并将它们以 1:1 的关系加入?还是我应该把它们都放在一张桌子上?

是否有任何优势,速度或其他,做一个或另一个?

【问题讨论】:

    标签: sql mysql database-design data-modeling


    【解决方案1】:

    两个表意味着 40% 的查询有连接,60% 没有连接。

    您并没有整体节省存储空间。

    40% 的查询速度较慢。

    60% 的查询速度更快,原因有二。 1)没有加入。 2) 更少的物理数据块。

    这种表现不同“重要”吗?这会让事情变得“更好”吗?

    除非您更清楚地定义每个查询所花费的时间 - 并运行基准测试来衡量差异 - 这并不重要。

    您必须实际构建和衡量性能,然后才能决定哪个“更好”。

    【讨论】:

    • 查询是否最好快速返回坏数据?在最坏的情况下加入会花费亚秒级 - 甚至不会向最终用户注册。说真的,谁给这个垃圾投票?
    • 答案是这样的:“直到您更清楚地定义每个查询所花费的时间——并运行基准测试来衡量差异——这并不重要。”简而言之:您必须进行基准测试。
    【解决方案2】:

    假设您的表的行在逻辑上是单独的实体,并且所有字段都与实体相关,那么它们应该都在同一个表中。

    但是,您可能有一个表,其中每一行在逻辑上是多个实体; refactoring 使其成为每个表的实体通常称为规范化,或这样的模式:规范化

    规范化的架构通常被认为是“正确的”,但在表之间连接时需要考虑性能。

    【讨论】:

      【解决方案3】:

      主要是尽量减少 NULL。如果您表中的其他 35 个字段通常为 NULL,请考虑使用单独的表方法。如果它们通常为非 NULL,则一张表可能就可以了。

      【讨论】:

        猜你喜欢
        • 2012-12-16
        • 1970-01-01
        • 1970-01-01
        • 2010-11-10
        • 2022-10-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多