导航

其实这两个类型最大的研究点就是在索引上的区别。现将我在使用SQL Server2008时的一个发现写下。(注:本讨论未建立任何全文索引)

通常我们认为 like '%服装%' 这样的查询是无法利用索引的,基本就是主键扫描。
但是当我们为某个“定长字符型”字段建立 “非聚集” “唯一” 索引时发现,如果我们的查询结果只有一条的话便会利用这个索引。如果结果超过一条或者使用“可变长字符型”字段建立的索引则不会使用索引。

另外,值得一提的是如果我们使用 and 连接条件进行筛选,如果结果仍为一条那么仍可以使用该索引。

例如:select * from movie where mname like ‘%午夜%’ and '%铃%' 。结果返回一条记录的话建立在mname(char或nchar类型)的非聚集唯一索引是有效的。呵呵,不禁有人笑说模糊匹配就是为了找一匹内容的啊,可是有时候我们实际上知道某个东西的名字但是又无法很准确完全地表达,该索引边可派上用场。不过,高性能数据库检索靠这些小手段还远远不够,在此仅是做了一个细节的探讨罢了。


这也可能是nchar相对nvarchar来说比较有实际意义的一种性能提升吧。

至于为什么会有这样的区别,笔者非常希望哪位高手路过时能够赐教。