日期:2014-05-19  浏览次数:20659 次

sqlserver中is null条件是否使用索引的问题(测试结果是null值也可以使用索引?)
看了一些资料,有提到使用is   null条件时不使用索引;
所以本打算用 ' '代替null;
但经测试is   null还是使用索引的;只有is   not   null不使用索引;
但 <> ' '也是不使用索引的,所以感觉没有必要用 ' '替换null;

测试语句--------
select   alias   from   fileinfo   where   alias   is   null
---使用索引:
(501   行受影响)
表   'FileInfo '。扫描计数   1,逻辑读取   650   次,物理读取   0   次,预读   0   次,lob   逻辑读取   0   次,lob   物理读取   0   次,lob   预读   0   次。
SQL   Server   执行时间:
      CPU   时间   =   0   毫秒,占用时间   =   137   毫秒。
---不使用索引:
(501   行受影响)
表   'FileInfo '。扫描计数   3,逻辑读取   491401   次,物理读取   0   次,预读   0   次,lob   逻辑读取   0   次,lob   物理读取   0   次,lob   预读   0   次。
SQL   Server   执行时间:
      CPU   时间   =   2968   毫秒,占用时间   =   1663   毫秒。

--------------------
所以null值也还是可以使用索引???????
能提供些权威性的资料或说明最好,谢谢

------解决方案--------------------
sqlserver 的null值可以索引,
------解决方案--------------------

SQLSERVER是会将NULL值存入索引树的,这和它的数据结构有关,通过NULL位图,它可以处理NULL值,而索引叶子节点中的数据存放结构和表数据行的结构是大同小异的,唯一索引中不可出现null