【问题标题】:Does adding another variable length column to a table with variable length rows further impact performance?向具有可变长度行的表中添加另一个可变长度列是否会进一步影响性能?
【发布时间】:2013-12-19 20:10:55
【问题描述】:

我知道将具有固定宽度行的表更改为具有可变宽度行(通过将 CHAR 列更改为 VARCHAR)会影响性能。

但是我的问题是,给定一个预先存在的具有可变宽度行的表(由于许多 VARCHAR 列),因此已经支付了性能损失,添加另一个可变长度列会进一步影响性能吗?

我的直觉是它不会,最大的性能损失是从固定宽度行切换到可变宽度行,并且添加另一个可变宽度列的影响可以忽略不计。

【问题讨论】:

    标签: mysql sql


    【解决方案1】:

    是的,不是的。确实,可变宽度字符列比固定宽度字符列慢。但是“惩罚”(或性能成本)是累积的,并且是每列的。因此,一般情况下,您添加到查询中的每一列(固定宽度或其他)都会影响性能(当您查询更多数据时,获取所有数据需要更长的时间)。

    【讨论】:

      【解决方案2】:

      您添加到表中的每个可变长度列都会使检索数据变得更糟。 另一个考虑因素是 - 如果可变长度列是查询的一部分(过滤器/Where 子句),并且您要在索引中使用这些列。索引中的可变长度字段也会增加索引开销。有关详细信息,您需要查看正在使用的特定数据库的文档。例如http://dev.mysql.com/doc/refman/5.6/en/innodb-table-and-index.html

      【讨论】:

        【解决方案3】:

        当然。将数据行提取到组件字段中需要一些额外的周期。

        然而,行大小的减少几乎肯定会抵消这一点——这意味着每个数据页有更多的行,因此全面的查找速度更快。

        【讨论】:

          【解决方案4】:

          这会对数据检索性能产生微小(以微秒为单位)的差异,但是使用错误的数据类型只是为了挤出数据库中的最后一个数据,对人类性能的影响可能很大而且因此很昂贵。

          使用最适合您在数据库中持久化的属性的数据类型。
          不要被“性能”所驱动,要被软件开发的通常准则所驱动,比如可读性、可维护性、使用能力等。

          使用错误的数据类型,您的代码会更加复杂(可能失去的性能增益比您获得的更多),并且您会后悔曾经这样做。而且我怀疑你是否会注意到这些收益。

          只有在您有证据证明存在问题并且问题大到足以引起重视时才执行此类操作。做你提议的事情被称为“过早的优化”,这可能是最糟糕的设计策略。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2012-06-29
            • 1970-01-01
            • 2020-04-16
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2019-08-11
            • 1970-01-01
            相关资源
            最近更新 更多