最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SQL?Server索引查找/掃描沒有出現(xiàn)key?lookup的案例機(jī)械

 更新時(shí)間:2024年03月18日 09:14:13   作者:瀟湘隱者  
對(duì)一個(gè)有聚簇索引的表來說是一個(gè)鍵查找(key lookup),對(duì)一個(gè)堆表來說是一個(gè)RID查找(RID lookup),這種查找即是——書簽查找(bookmark lookup),這篇文章主要介紹了SQL?Server索引查找/掃描沒有出現(xiàn)key?lookup的案例淺析,需要的朋友可以參考下

在我們講解這個(gè)案例前,我們先來了解/預(yù)熱一下SQL Server的兩個(gè)概念:鍵查找(key lookup)和RID查找(RID lookup),通常,當(dāng)查詢優(yōu)化器使用非聚集索引進(jìn)行查找時(shí),如果所選擇的列或查詢條件中的列只部分包含在使用的非聚集索引和聚集索引中時(shí),就需要一個(gè)查找(lookup)來檢索其他字段來滿足請(qǐng)求。對(duì)一個(gè)有聚簇索引的表來說是一個(gè)鍵查找(key lookup),對(duì)一個(gè)堆表來說是一個(gè)RID查找(RID lookup),這種查找即是——書簽查找(bookmark lookup)。在其他數(shù)據(jù)庫概念中,可能又叫回表查詢之類的概念。

那么我們先來構(gòu)造案例所需的測(cè)試環(huán)境。下面測(cè)試環(huán)境為SQL Server 2014。

SELECT * INTO TEST FROM SYS.OBJECTS
CREATE CLUSTERED INDEX PK_TEST ON TEST(OBJECT_ID, NAME,CREATE_DATE)
CREATE INDEX IX_TEST_N1 ON TEST(PARENT_OBJECT_ID, TYPE)
UPDATE STATISTICS TEST WITH FULLSCAN;

如上所示,表TEST在字段OBJECT_ID, NAME,CREATE_DATE建立了聚集索引,然后下面這種查詢語句,你查看其實(shí)際執(zhí)行計(jì)劃

SELECT OBJECT_ID, NAME,CREATE_DATE,PARENT_OBJECT_ID, TYPE 
FROM TEST WHERE PARENT_OBJECT_ID=2255213;

你會(huì)發(fā)現(xiàn),SQL Server優(yōu)化器走索引IX_TEST_N1查找就返回了所有數(shù)據(jù)。沒有書簽查找(回表查詢),那么這是為什么呢?朋友這樣問我的時(shí)候,我還真沒有想明白。難道索引IX_TEST_N1中也會(huì)存儲(chǔ)OBJECT_ID, NAME,CREATE_DATE的值? 當(dāng)然你構(gòu)造其它的案例時(shí),有可能是索引IX_TEST_N1掃描就返回了數(shù)據(jù)。不會(huì)發(fā)生書簽查找。

后面才想明白,非聚集索引中的索引行指向數(shù)據(jù)行的指針稱為行定位器。 行定位器的結(jié)構(gòu)取決于數(shù)據(jù)頁是存儲(chǔ)在堆中還是聚集表中。 對(duì)于堆,行定位器是指向行的指針。 對(duì)于聚集表,行定位器是聚集索引鍵。這是不是有點(diǎn)眼熟,類似于MySQL InnoDB的二級(jí)索引(Secondary Index)會(huì)自動(dòng)補(bǔ)齊主鍵,將主鍵列追加到二級(jí)索引列后面。所以執(zhí)行計(jì)劃就走索引IX_TEST_N1查找就能返回?cái)?shù)據(jù)了。根本不需要書簽查找(回表查詢)。如果查詢語句多一個(gè)字段或者是SELECT *的話,你就會(huì)看到書簽查找了。如下所示

到此這篇關(guān)于SQL Server索引查找/掃描沒有出現(xiàn)key lookup的案例淺析的文章就介紹到這了,更多相關(guān)SQL Server索引查找/掃描內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論

博白县| 从江县| 淮北市| 金阳县| 云梦县| 会昌县| 苏州市| 东台市| 汾阳市| 隆子县| 筠连县| 新田县| 沁源县| 陕西省| 全州县| 法库县| 镇安县| 东乡县| 江源县| 花垣县| 常熟市| 淳化县| 阜南县| 临夏县| 合水县| 东乌珠穆沁旗| 广元市| 利辛县| 镇坪县| 嫩江县| 澄迈县| 临夏市| 和林格尔县| 罗甸县| 庄河市| 鱼台县| 东乡| 本溪市| 禹城市| 资阳市| 基隆市|