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
原文:大专栏 [SQL Server] Range Index