假设我的 SQL Server 2005 数据库中有一个百万行的表 [mytable],其中包含列:
- 身份证
- 一些领域
- 另一个领域
- 网址
这个系统中一个非常常见的查询是:
从 [mytable] 中选择 *,其中 url = ' http://www.somesite.com/some/really/long/url '
哪个会给我更好的性能:
a) 为 Url 列添加索引。
或
b) 添加一个额外的“url_hash”列,其中包含与 url 对应的数字散列,然后计算该散列以用于我的 where 子句,例如:
从 [mytable] 中选择 *,其中 url_hash = some-computed-hash 和 url = ' http://www.somesite.com/some/really/long/url '
(b) 是否值得额外的复杂性?我需要在插入和选择时计算哈希值。
2009 年 3 月 30 日更新
ID为主键
另外,上面的查询不应该有“*”。相反,选择列表应该是表中的所有字段。
“*”只是速记 - 很抱歉造成混淆。
2009 年 3 月 31 日更新
还有,忘了说,url_hash 字段上会有一个索引。
最佳答案
如果您只选择所需的列(与“*”相反),并在“Url”和所选列上创建覆盖非聚集索引,您将获得非常高效的查找。
关于sql-server - 计算 SQL Server 数据库中字符串的哈希值——值得付出努力吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/699499/