【问题标题】:Indexing on varbinary column vs varchar vs int - which is fast在 varbinary 列 vs varchar vs int 上建立索引 - 这很快
【发布时间】:2015-08-22 18:25:08
【问题描述】:

如果在二进制列而不是字符串列上创建索引,我们是否有任何性能优势。两者哪个会快。我知道 varchar 与数值相比会很慢。由于必须直接读取二进制值,因此我希望它应该很快。

编辑:

实际用例是如果我有 GUID 列,我可以使用 CHECKSUM 或 HASHBYTES 来避免字符串比较。

我知道我们无法在 MAX 上创建索引。它只是关于 varchar(25)、varbinary(25)、int。 varchar(max)没有意义

【问题讨论】:

  • 一件事:不能在超过 900 字节的列上创建索引。不能将大对象 (LOB) 数据类型 ntext、text、varchar(max)、nvarchar(max)、varbinary(max)、xml 或 image 的列指定为索引的键列
  • 此列中存储了哪些数据?此内容的大小有多大?
  • 为您的数据使用适当的数据类型。不要尝试退出智能 sql server。
  • uniqueidentifier 存储为 16 字节二进制数据。不是字符串。
  • 不,我没有将 GUID 存储到 varchar 列中。我只是比较存储在列中的两个 GUID 与相同长度的字符串列,哪个快,为什么?与字符串相比,我们可以在多大程度上看到 GUID 的性能更好,即在数据类型长度方面

标签: sql sql-server database database-performance


【解决方案1】:

这取决于列的大小,但对于大小相同的两列,varbinary通常会更快。这里涉及的另一个因素是用于列的排序规则。 Sql Server 中的默认排序规则不区分大小写,这意味着用于比较目的SOME RANDOM KEYsome random key,并且它们的每个排列都是 相同 值,因此数据库必须在以下情况下做额外的工作比较和排序这些键,以了解什么在哪里以及什么值与其他值匹配:这不再只是逐个字节的直接比较。

【讨论】:

  • 这是否意味着,至少在相同大小的情况下,二进制运算比数字运算要快。即 int(4 bytes) vs binary(4 bytes) 所以二进制在这里会很快吗?
  • 不,int 比较会更快,因为它有 cpu 支持:比较两个整数是一条 cpu 指令。
猜你喜欢
  • 2010-11-01
  • 2015-11-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-04
  • 1970-01-01
相关资源
最近更新 更多