消除Key Lookup和RID Lookup Part2:索引交集和索引Join
Jun 07, 2016 pm 03:43 PM今天在MSDN查询优化建议中看到这样一条信息:SQL Server 会自动考虑索引交集并可以在同一查询中对 同一个表使用多个索引 (可能跟大家的理解有偏差)。 在解释之前我们先看一个例子: use AdventureWorks go select soh .* from sales . SalesOrderHeader AS
今天在MSDN查询优化建议中看到这样一条信息:SQL Server 会自动考虑索引交集并可以在同一查询中对同一个表使用多个索引(可能跟大家的理解有偏差)。
在解释之前我们先看一个例子:
useAdventureWorks
go
select soh.*
from sales.SalesOrderHeaderASsoh
WHERE soh.SalesPersonID= 276
and soh.OrderDatebetween'4/1/2002'and'7/1/2002'
查看执行计划:
虽然我们建立了SalesPersonID的非聚集索引,但是SQL Server并没有使用,因为OrderDate并没有包含在索引中。 相信这时候大部分的人会在索引上面加一列OrderDate.其实可以还可以有另外一种方法,不改变现在的索引,而新添加一个新索引。 这样SQL Server可以使用多个索引来完成本次查询,这个过程就是索引交集。
那么我们现在OrderDate上面创建一个索引:
CREATE NONCLUSTEREDINDEX[ix_orderdate]ON [Sales].[SalesOrderHeader]( [OrderDate]ASC)
增加索引后我们会看到下面的执行计划:
这次SQL Server使用了两个Non-clustered index seek,然后获得两个子集的索引交集,最后通过Keylookup获得所有输出字段.而通常我们认为一个对一个表的查询不会用到多个索引。其实SQLServer 优化引擎是可以使用到多个索引的优势。
上面的测试给我们一种启示,有的时候不一定要通过一个宽索引列(多个索引键值)提高性能,也可以通过多个窄索引键提升性能。另外如果你发现索引没有覆盖到所以的查询条件,但是你又不能直接改索引时,添加另外一个索引也可以满足你的要求。
而索引联接是索引交集的一个变种,如果查询能够从索引中直接获得所需要的数据,就会称为Index join(上面我们看到数据还是需要Key Lookup中获取,Index无法提供所有的数据).
更多信息可以参考:
http://msdn.microsoft.com/zh-cn/library/ms188722(v=sql.105).aspx
http://msdn.microsoft.com/zh-cn/library/aa226170(v=sql.70).aspx

Artikel Panas

Alat panas Tag

Artikel Panas

Tag artikel panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Apakah yang dimaksudkan dengan atribut identiti dalam SQL?

Gunakan fungsi PHP array_intersect_key() untuk mendapatkan persimpangan

Kerentanan kunci pengesahan dua faktor Yubico yang tidak dapat ditambal memecah keselamatan kebanyakan peranti Yubikey 5, Kunci Keselamatan dan YubiHSM 2FA

Bagaimana untuk menyelesaikan masalah penghapusan kelompok nilai utama dalam redis

Masa terbaik untuk membeli siri Huawei Mate 60, penghapusan AI baharu + naik taraf imej, dan nikmati promosi musim luruh

Bagaimana untuk menyelesaikan masalah bahawa indeks melebihi had tatasusunan

Bagaimana untuk meningkatkan kecekapan pengumpulan data dan pengagregatan data dalam PHP dan MySQL melalui indeks?
