星期四, 6月 06, 2024

[SQL] Key Lookup

延續 [SQL] Index Seek 讀取全部資料 內容,在 try 該主題執行計畫時,無意中看到沒有出現過的執行計畫執行方式 - 從 Index Scan 出發的 Key Lookup
SELECT [BusinessEntityID] , LastName , MiddleName , FirstName
FROM Person.Person
WHERE LastName LIKE '%old%'
Nonclustered index 是由 Index Key、included column 和 Clustered Key 組成,利用 Nonclustered index 搜尋資料,會先利用 Index Key 來搜尋,假如利用 Index Key 就搜尋完全部資料,此情況稱為 Covering Index(覆蓋索引);相反地,無法在 Index Key 上找到全部資料,就會進一步利用 Clustered Key 進入 Clustered Index 內去搜尋所需要資料,此行為稱為索引鍵查閱(Key Lookup),2005 SP2 之前稱為書籤查詢(Bookmark Lookup),會增加鎖定和執行時間
該說明只強調 nonclustered index,並沒有提到一定要從 Index Seek 出發,以往看見的都是 Index Seek、Nested Loop、Key Lookup 這三個 operator 組合,第一次看見是 Index Scan 出發

第一眼看見該執行計畫,直覺為什麼不是跑 Clustered Index Scan 阿

沒有留言:

張貼留言