[SQL Server] Range Index

IN-Memory OLTP的Range Index使用類似B-tree的BW-tree結構,

透過BW-tree有效改善Range和point搜尋效率,並節省更多記憶體開銷,

尤其更適合DATE, DATETIME and DATETIME2。

我以前寫過一篇Bw(Buzz Word)- Tree 筆記,這篇我補充以前忽略的細節和觀念

Bw-Tree 優點

1.針對範圍(range)和指標(point)搜尋有很高效率

2.自我平衡

3.每張 page 透過邏輯指標互相串起來

4.依照Key有順序存取

5.更有效率使用多CPU

 

BW-tree結構大致如下

當我傳送where c1=13並使用range index搜尋時,會先從PID0開始並知道下一個page要使用PID1(因為8~30),

這時PID1會透過PMT提供相關PA,透過該PA我們知道PID13有我們需要的資料,

由於PID13已經是leaf page level,所以該page將提供真實資料的memory address,

而這時In-Memory OLTP engine也知道搜尋到該page就已經符合使用者所需資料。

 

如果C1重複多筆資料

這些重複資料都將被Linked再一起(類似hash indexes),

因為leaf page 不會包含這些重複row head

資料更新

如果我將原有13更新(update)為15,為了提高交易效率,in-Memory OLTP engine都不會再原有page更新,

而是建立(insert)一個較小的page包含資料變更資訊,最後在更新PMT上所對應的PA並指向最後更新的真實資料,

由於整個BW-tree存取路徑並不會變更,所以更可以節省記憶體開銷,

而被marked刪除的舊資料,後續將由GC自動回收。

 

參考

Bw(Buzz Word)- Tree 筆記

In-Memory OLTP – ORDER BY Behavior Clause Using Range Index

LOB and Row-Overflow Storage in In-Memory OLTP in SQL Server 2016

In-Memory OLTP – Row Structure and Indexes

In-Memory OLTP: Part 2 – Indexes