【问题标题】:Joining on a non-PK field, does length of varchar datatype determine query speed? SQL Server 2008加入非 PK 字段,varchar 数据类型的长度是否决定查询速度? SQL Server 2008
【发布时间】:2012-10-24 15:10:59
【问题描述】:

我得到了一大堆杂乱无章的数据来分析,我陷入了困境。我有一个约 200 万行表,其数据类型为 varchar(50) 的非唯一标识符。此标识符对于personID 是唯一的。在我弄清楚我需要如何规范化这个垃圾之前,我现在有另一个问题可能对我有帮助:例如,如果我将数据类型更改为varchar(25),这是否有助于查询在加入时运行得更快非PK领域?字符串中的所有字符都是整数,但尝试将它们转换为 int 会导致溢出。或者我可以暂时以某种方式索引该列以使某些查询运行得更快吗?

编辑:personID 将是另一个表的外键,其中包含一个人的人口统计信息。

【问题讨论】:

    标签: sql-server database indexing


    【解决方案1】:

    从技术上讲,varchar 的长度指定了它的最大长度。

    实际长度是可变的(因此是名称),因此较低的最大值不会改变评估,因为它将在实际字符串上进行。

    更多信息:

    Check this MSDN article 和这个 Stack overflow Post

    【讨论】:

    • 我认为查看剩余的不需要的分配空间可能会减慢查询速度。
    • sql server 不会为 varchar(x) 保留空间,它只会是 char(x)。
    【解决方案2】:

    Varchar(50)varchar(25) 肯定会减少该表中记录的大小,从而减少包含该表的数据库页数,提高查询的性能(可能在一定程度上),但是这样的ALTER TABLE 语句可能需要很长时间。

    或者,如果您在连接列上定义索引,并且如果您的检索列表很小,您可以将这些列也包含在索引定义中 (Covering index),这也会显着降低查询执行时间。

    【讨论】:

    • 我从未听说过覆盖索引,我得研究一下。
    猜你喜欢
    • 1970-01-01
    • 2018-05-28
    • 2017-08-12
    • 1970-01-01
    • 2013-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多