[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

原文:大专栏  [SQL Server] Range Index


猜你喜欢

转载自www.cnblogs.com/chinatrump/p/11468533.html