【问题标题】:Bigint vs nvarchar non-clustered index: SQL Server 2008Bigint 与 nvarchar 非聚集索引:SQL Server 2008
【发布时间】:2015-06-13 17:26:38
【问题描述】:

我有一个非常大的表,大多数查询使用 WHERE 子句过滤包含 ID 号的列。不幸的是,这个 ID 号存储为 nvarchar(255)。重新转换为 bigint(它不适合 int)有助于查询性能吗?

注意 - 此 ID 值不是唯一的,因此无法分配主键。这是否意味着我不能在这里使用聚集索引?该表当前包含 0 个聚集索引。

【问题讨论】:

  • “重铸为 bigint”是什么意思?在运行时或(希望...)通过更改表定义?
  • 如果字段只包含数值,,请更改表定义以使该字段成为适当的数字类型。你应该总是choose the correct data type for your fields
  • Martin Smith,我的意思是更改表定义并更新所有现有值

标签: sql-server


【解决方案1】:

当然,占用 8 个字节的 bigint 会比 nvarchar(255) 快​​得多,如果您使用全部 255 个字符,则可能占用多达 512 个字节。根据 Martin 的评论,如果这个 ID 现在适合 bigint,这意味着它不超过 19 位数字(我猜你没有负 ID),所以它实际上可能占用多达 40 个字节(2 + 2 * 19)。有关此here 的更多信息。

您可以在不唯一的字段上创建索引,甚至是集群索引。关于这一点,您可能会发现这个问题很有用:Do clustered indexes have to be unique?

【讨论】:

  • nvarchar(255) 占用最多 512个字节。存储bigint 类型值实际占用最多的是2 + DATALENGTH(N'-9223372036854775808'),即42
猜你喜欢
  • 2011-06-02
  • 2018-05-08
  • 2013-08-20
  • 2012-10-01
  • 1970-01-01
  • 2011-03-24
  • 2014-04-27
  • 2013-03-22
相关资源
最近更新 更多