Nvarchar数据类型比较特殊
有开发人员反馈,两个字段关联,一个是varchar、另外一个是Nvarchar,会有性能问题吗?
这个问题其实不能说一定有。通过实验来说明吧。
具体实验-表结构

类型转换

两种类型都有索引情况下


B表VAR关闭索引
索引已更改。
设置B表var列索引不可见。自然是全表查询。

B表的M列搜索引,可以使用。

那么B表通过m列找到的数据传导给A表

可以用到索引的。即使b.var的索引不可见。相当于b.m='1’找到了b.var=‘1’ select * from a,b where a.var=‘1’ and b.m=‘1’;
所以关联列在特殊情况下,不是必须两列都有索引。但是这是特殊情况。一般日常中我还是建议,且强制关联列都建立索引。因为我们无法保证都是B表这种作为传导条件的。如果是A表作为传导入口就不行了。
因为在b.var没有索引的情况下。无论执行下面哪种B表都是全表。

在B表nvar有索引的情况下,看看索引的使用情况
B表nvar有索引的情况下,这个是可以用到索引的。

但是只要一关联到A表的VAR列就是全表关联了。

那么在其他不变的情况下,而如果是A表的VAR作为传导开始,也是可以都用到索引的。

所以这就要求如果两个关联列一个是var一个是Nvar的话,那么要以var的作为条件去查比较好。
从nvar传到var即使a.var列有索引还是发生了转换

从var传到nvar即使b.var列现在索引是不可见的,两个表都用到了索引。
结论
