SQL Server中创建索引时,有2个比较特殊的关键字: where 、include。
(1)什么是条件索引呢?
where顾名思义,就和sql语句中的where是一个意思,起到过滤作用。
加上where子句,创建的索引就是条件索引,索引中只包含满足条件的数据,这样会使得索引的体积更小,不管是索引扫描,还是查找,需要访问的页数也就更少。
举例:
create index idx_A on A(name)
where biz_date >='2017-01-01'
这个索引中,只包含biz_date大于等于2017-01-01的数据。
(2)include包含索引
include是包含的意思,加上include子句,可以指定多个列,也就是说在这个索引中会包含include中指定的列。
举例:
create index idx_A on A(biz_date) include(name,id)
这个索引中,include包含了name,id 两个字段。
(3)那么这种索引和直接指定 biz_date,name,id的索引,有什么区别呢?
区别在于 include中的列,是不排序的,一般可以把select中的列,放到include中,好处是索引的开销相对小了。
如果是在where中的列,就不适合放到include子句中,因为这样不利于快速查找过滤数据。