SQL 2014内存表支持两种类型的索引,hash non clustered,non clustered。由于内存优化表不存储为行,我们需要有一个索引compulosary.Below是创建哈希索引的语法
CREATE TABLE dbo.sample_memoryoptimizedtable_Hash
(
c1 int NOT NULL,
c2 float NOT NULL,
c3 decimal(10, 2) NOT NULL
CONSTRAINT PK_sample_memoryoptimizedtable_Hash **PRIMARY KEY NONCLUSTERED HASH**
(
c1
)WITH ( BUCKET_COUNT = 1024)
)WITH ( MEMORY_OPTIMIZED = ON , DURABILITY = SCHEMA_AND_DATA )
GO
上面的语句创建一个哈希索引,并将相应的行存储到它们的桶中.Buckets包含指向数据内存地址的指针。
但是当我们创建具有以下定义的非聚集索引时
CREATE TABLE dbo.sample_memoryoptimizedtable_Range
(
c1 int NOT NULL,
c2 float NOT NULL,
c3 decimal(10, 2) NOT NULL
CONSTRAINT PK_sample_memoryoptimizedtable_Range PRIMARY KEY NONCLUSTERED
(
c1 ASC
)
)WITH ( MEMORY_OPTIMIZED = ON , DURABILITY = SCHEMA_AND_DATA )
GO
如何存储上述索引,是否存储为B树,因为此索引未进行哈希处理,并且在启动时重新创建表,索引。如何存储数据。
以下是迄今为止最好的链接和我的分析。
答案 0 :(得分:1)
您所指的“非群集”索引实际上是Range索引。 Hash和Range索引都是非群集的,并且内存中的OLTP表中没有“聚簇”索引(主键被强制实现为聚簇哈希索引)。范围索引是通过修改的B树实现的,你可以在http://research.microsoft.com/pubs/193594/Hekaton%20-%20Sigmod2013%20final.pdf
的sigmod白皮书上阅读更多关于两者的基本细节的信息。