在sql Server(2005)中,我需要索引一个列(仅限完全匹配),即nvarchar(2000).什么是最具可扩展性,高性能的方法?
在sql Server(2005)中,使用以下类型对列进行索引的实际区别是什么:
> nvarchar(2000)
> char(40)
>二进制(16)
例如.对索引二进制(16)列的查找是否明显快于对索引的nvarchar(2000)的查找?如果是这样,多少钱?
显然小在某些方面总是更好,但我不太熟悉sql Server如何优化其索引以了解它如何处理长度.
解决方法
你从错误的方向思考这个问题:
>创建满足性能目标所需的索引
>不要创建不需要的索引
无论列是二进制(16)还是nvarchar(2000)都没有什么区别,因为你不要只是不加考虑地添加索引.
不要让索引选择决定您的列类型.如果需要索引nvarchar(2000),请考虑全文索引或为列和索引添加哈希值.
根据您的更新,我可能会使用HashBytes()函数和索引创建校验和列或计算列.请注意,校验和与加密哈希值不同,因此您更有可能发生冲突,但您也可以匹配文本的全部内容,并且它将首先使用索引进行过滤. HashBytes()不太可能发生冲突,但它仍然可能,因此您仍然需要比较实际列.对每个查询和每次更改计算哈希值,HashBytes也更昂贵.