什么叫索引交叉?

0

已邀请:
1

戴俊青 - 微软数据库开发和性能调优 2013-07-25 回答

一个表中包含多个索引,sql server在执行的时候会选择多个索引来执行这个查询,利用多个索引,根据每个索引选择小的数据子集,然后返回子集的满足条件的行数。SQL SERVER可以在一个表中开发多个索引,然后使用一个连接算法,在两个自己中得到索引交叉。
在adventureworks库中,建立如下测试环境:
select
soh.*
from sales.salesorderheader as soh
where soh.salespersonid=276
and soh.orderdate between '4/1/2002' and '7/1/2002'
a.jpg

在where 子句中,salespersonid上有个非聚集索引,orderdate上没有索引。
下面在orderdate上建立非聚集索引:
create nonclustered index IX_aa on sales.salesorderheader(orderdate)
重新执行一下:
select
soh.*
from sales.salesorderheader as soh
where soh.salespersonid=276
and soh.orderdate between '4/1/2002' and '7/1/2002'
b.jpg

正如所见,SQL SERVER 充分利用两个非聚集索引进行查找,然后采用一个交叉算法来获得两个索引的子集的索引交叉,然后从结果数据中进行一次关键字查找,来读取没有包含在这些索引中的其他数据。

要回复问题请先登录注册