前言

前面幾節(jié)都是講的基礎(chǔ)內(nèi)容,本節(jié)我們講講索引性能優(yōu)化,當對大數(shù)據(jù)進行處理時首先想到的就是索引,一旦遇到這樣的問題則手忙腳亂,各種查資料,為何平常不扎實基本功呢,我們由淺入深,簡短的內(nèi)容,深入的理解,而非一上來就把問題給框死,立馬給出解決方案,拋出問題,再到解決問題,你GET了沒有。

Bookmark Lookup、RID Lookup、Key Lookup定義

一說到這三者,如果對索引研究不深的童鞋估計是懵逼的,什么玩意,我們姑且將上面三者翻譯為:標簽查找、行ID查找、鍵查找。標簽查找和鍵查找是一個意思,在SQL 2005之前叫Key Lookup。怎么解釋,如何定義呢?首先我們不看定義,直接看下面一步一步解析,如果你實在忍不住,請看園友【永紅】的見解,解釋還是非常到位。我們簡短的說明下此三者概念。

在查詢中,我們對返回的列在查詢條件上若建立了非聚集索引,此時將可能嘗試使用非聚集索引查找,如果返回的列沒有創(chuàng)建非聚集索引,此時會返回到數(shù)據(jù)頁中去獲取這些列的數(shù)據(jù),即使表中存在聚集索引或者沒有,都會返回到表中或者聚集索引中去獲取數(shù)據(jù)。對于以上場景描述,如果表沒有創(chuàng)建聚集索引則稱為Bookmar Lookup,如果表中沒有聚集索引但是存在非聚集索引我們稱為RID Lookup。看到這里我們就會想法操作如此耗時,還要返回到基表中去獲取數(shù)據(jù),所以才有了我們本節(jié)來移除以上三者來提高查詢性能。接下來我們一起來看看。

拋出Bookmark Lookup、RID Lookup、Key Lookup問題

我們首先創(chuàng)建如下表

大數(shù)據(jù)培訓(xùn),云培訓(xùn),數(shù)據(jù)挖掘培訓(xùn),云計算培訓(xùn),高端軟件開發(fā)培訓(xùn),項目經(jīng)理培訓(xùn)

USE TSQL2012 
GO
CREATE TABLE Sales.Orders 
(
[orderid] INT,
[shipaddress] VARCHAR(100),
[shipcity] VARCHAR(100),
[shipregion] VARCHAR(100))
GO

網(wǎng)友評論