【问题标题】:Is it true that columns number does not affect database performance but rows number does?列数确实不会影响数据库性能,但行数会影响数据库性能吗?
【发布时间】:2010-07-08 13:38:59
【问题描述】:

如标题所示。

我正在考虑使用单独的表与JOIN或使用单表,基本上我担心性能。

谢谢。

【问题讨论】:

    标签: mysql database


    【解决方案1】:

    表中的总列数可能会极大地影响性能。宽表可能涉及为每一行加载大量数据,除非您小心地只带回每个查询中需要的列。

    此外,表中的大量列可能表明存在设计缺陷和缺乏规范化。

    如果您的索引设置正确,行数就不是问题。

    【讨论】:

    • 你的意思是如果我仔细优化我的sql语句以检索有限数量的列,它不会是性能问题吗?
    • @Ben:这可能会有所帮助,但之后它还可能取决于您存储和检索的数据类型(100 个单字符列与 100 个 BLOB 列)和数据库系统您的使用 - 不同的供应商可能都有不同的方式(可能还有不同的优化)来处理同一个表中的大量列。
    【解决方案2】:

    这称为vertical partitioning。如果您可以将不常用的列分离到它们自己的表中,它可以减少 I/O,但如果您的大多数查询最终加入表,则可能会增加开销。特别是如果两张表都在同一张光盘上。

    【讨论】:

      【解决方案3】:

      查询返回的列数会影响性能——建议只带回您需要的列。

      出于其他原因(称为规范化),最好将重复的信息分成单独的表格 - 例如,如果您有工作的候选人,您不希望每个申请人的工作都有很多列- 你最好有一张申请人表、一张工作表和一张将两者联系起来的申请表。

      拥有一个宽表可能本身也会影响性能,因为每条记录都更大,这意味着更多的磁盘会试图扫描表(这里有一些警告,它在很大程度上取决于使用的数据类型)

      【讨论】:

        【解决方案4】:

        不,列号也会影响性能。更多列意味着需要处理的数据更多。更多的列会影响驱动器上的布局,这可能会影响性能。

        所有这一切在很大程度上取决于您的数据、查询以及您如何调整数据库和表(例如,根据您的查询进行适当的索引。

        在您担心性能之前,请先使用您的实际数据和查询开始分析和测试,如果您只是猜测,您会猜错。

        【讨论】:

          【解决方案5】:

          如果您执行select *... 或尝试更新/插入一行并更改每一列,或者如果索引了许多列,那么一个非常宽的表(几十到几百列)肯定会导致性能问题。

          【讨论】:

            【解决方案6】:

            列号和行号都会影响性能。

            如果您担心性能,您可能希望创建仅包含您用于连接的列的视图。另一种选择是创建索引,但仅在表不经常更新时才使用索引。

            此外,除非您有超过 1000 条记录或超过 15 列,否则您不必担心性能。

            【讨论】:

            • 1000 条记录和 15 列是非常随意的。这实际上取决于每个数据的类型,即使在少于十二行的表中,您也应该始终在搜索列上具有索引,否则优化器可能会决定忽略引用表。最后,视图不是那样工作的。大多数视图最终将只是一个 MERGE 视图,它只是修改您的 SQL,而不是创建实际表数据的子集。
            猜你喜欢
            • 2010-10-06
            • 2011-04-09
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-07-07
            • 1970-01-01
            • 2020-05-30
            • 1970-01-01
            相关资源
            最近更新 更多