【问题标题】:Should database variable-length text fields be powers of 2?数据库可变长度文本字段应该是 2 的幂吗?
【发布时间】:2008-10-17 14:29:22
【问题描述】:

我的一个朋友声称,在典型的数据库中,由于页面分配的粒度,使用(例如)nvarchar[256] 将比nvarchar[200]nvarchar[250] 提供稍好的性能。

这是真的吗?

谢谢!

【问题讨论】:

标签: database database-design


【解决方案1】:

这不是真的。表在磁盘上以 8k 页分配。从磁盘读取表时,会在一次 IO 操作中读取整个页面并存储在内存中。因此,列的长度根本不会影响内存对齐。事实上,对于非可变长度数据类型,越短肯定越好:与 nchar(256) 列相比,nchar(200) 列每页允许的行数更多。这允许每个物理 IO 读取更多行,这可能会对数据库性能产生剧烈影响。

【讨论】:

    【解决方案2】:

    不,没有。

    【讨论】:

      【解决方案3】:

      如果有的话,由于分配开销,它可能会更糟。当您分配 nvarchar(256) 时,数据库可能包含几个字节作为长度,因此存储需求实际上可能是 258。

      这里有太多的抽象层次在起作用,如果尝试在顶部优化只在底部重要的东西,你不会看到任何好处,而且你可能只会让事情变得更糟!

      【讨论】:

      • 至少这是一个过早优化的新尝试。我以前从未听过这个特别的。
      【解决方案4】:

      我想知道你的朋友是否以某种方式得出了他/她自己的结论,或者这是一个神话传播的案例。

      Tom Kyte 关于“你知道的事情”的精彩演讲,几乎每个人都应该在做出上述声明之前观看:Things you know

      【讨论】:

        【解决方案5】:

        这样想: 如果 nvarchar[256] 的性能比 nvarchar[200] 好,那么当您请求 nvarchar[200] 时,DBMS 不会只创建一个 nvarchar[256] 吗? (但仍然让它看起来像 nvarchar[200])

        优秀的 DBMS 有一些非常先进的优化。我很确定他们也有所有简单的。

        【讨论】:

          猜你喜欢
          • 2011-05-29
          • 2010-11-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-05-25
          相关资源
          最近更新 更多