非聚集索引其實可以看作一個聚集索引表.當這個非聚集索引中包含了查詢所需要的所有信息時,則查詢不再需要去查詢基本表,而僅僅是從非聚集索引就能得到數(shù)據(jù): 下面來看非聚集索引如何覆蓋的: 在adventureWorks的SalesOrderHeader表中,現(xiàn)在只有CustomerID列有非聚集索引,而BillToAddressID沒有索引,我們的查詢計劃會是這樣: 查詢會根據(jù)CustomerID列上的非聚集索引找到相應的指針后,去基本表上查找數(shù)據(jù).從執(zhí)行計劃可以想象,這個效率并不快。 下面我們來看覆蓋索引,通過在CustomerID和BillToAddressID上建立非聚集索引,我們覆蓋到了上面查詢語句的所有數(shù)據(jù): 通過覆蓋索引,可以看到執(zhí)行計劃簡單到不能再簡單,直接從非聚集索引的葉子節(jié)點提取到數(shù)據(jù),無需再查找基本表! 這個性能的提升可以從IO統(tǒng)計看出來,下面我們來看有覆蓋索引和沒有覆蓋索引的IO對比: 索引的覆蓋不僅僅帶來的是效率的提升,還有并發(fā)的提升,因為減少了對基本表的依賴,所以提升了并發(fā),從而減少了死鎖! 原文:https://www.cnblogs.com/CareySon/archive/2011/12/27/2303508.html |
|
來自: johnny_net > 《sql server》