sqlserver 索引高階(下)

2022-06-30 13:09:12 字數 882 閱讀 5362

參考原文 

第十級, 索引內部結構

建立索引的目的是加快對錶中記錄的查詢或排序。為表設定索引要付出代價的:一是增加了資料庫的儲存空間,二是在插入和修改資料時要花費較多的時間(因為索引也要隨之變動)。在之前的級別中,我們從邏輯的角度介紹索引。除了要關心索引帶來的好處,還要關心索引的消耗。理解索引的內部結構,可以在進行資料插入,更新,刪除的時候,最小化索引的建立,修改,移動,從而減少索引消耗。

索引是一種結構。在sql server中,索引和聚集索引表的儲存結構都是b樹,b樹是一種用於查詢的平衡多叉樹.b樹結構如下:

葉子和非葉子層

索引的機構由葉子和非葉子層組成。儘管沒有明顯的說明,我們之前的級別主要集中於索引的葉子層。索引入口也叫做索引行,不管它是表的一行(聚集索引葉子入口),還是表中一行的引用(非聚集索引葉子層),還是指向更低級別(非葉子層)的一頁。指向頁的指標除了包含資料檔案的編號和頁的編號,如果乙個指標是5:4567,表示指向#5檔案的第4567頁。

非葉子層:  

構建在葉子層上的結構,使得sql server可以完成下面的工作:

葉子層: 

對於非聚集索引來說,在葉子層每行都有乙個入口(過濾索引除外),每個入口由索引鍵列、可選的包含列和標籤組成,標籤的記憶體是聚集索引的鍵列或者rid(row id)。

聚集索引的葉子層就是表本身,每個葉子層的入口都是表中的一行。

a. 非聚集索引 

b. 聚集索引

SQLServer索引的四個高階特性

來自 有一些索引非常低效的,比如經常查詢狀態為進行中的訂單,訂單有99 的狀態是完成,1 是進行中 因此我們在訂單狀態字段上建了乙個索引,效能是提高了,但是感覺索引中儲存了99 的完成狀態資料是永遠不會查詢到的,很浪費空間。如果我們的索引在建立的時間就不儲存完成狀態的資料,那不是更好。index b...

SQLServer索引的四個高階特性

有一些索引非常低效的,比如經常查詢狀態為進行中的訂單,訂單有99 的狀態是完成,1 是進行中 因此我們在訂單狀態字段上建了乙個索引,效能是提高了,但是感覺索引中儲存了99 的完成狀態資料是永遠不會查詢到的,很浪費空間。如果我們的索引在建立的時間就不儲存完成狀態的資料,那不是更好。index buil...

mysql高階索引 Mysql高階 索引優化全解

是否會使用索引,是mysql的關鍵 1.sql效能下降原因查詢語句寫的不好,連線子查詢太多,沒有建索引等等 索引失效 關聯jion表過多 伺服器引數設定不合適2.索引優化 索引是什麼?索引就是一種排好序的查詢資料結構,常見模型有雜湊表 有序陣列 二叉搜尋樹 目前最常用的innodb引擎使用的模型是b...