IN Memory Oltp哈希索引与非群集

时间:2015-06-09 10:23:36

标签: sql-server sql-server-2014 in-memory

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树,因为此索引未进行哈希处理,并且在启动时重新创建表,索引。如何存储数据。

以下是迄今为止最好的链接和我的分析。

http://www.mssqltips.com/sqlservertip/3099/understanding-sql-server-memoryoptimized-tables-hash-indexes/

1 个答案:

答案 0 :(得分:1)

您所指的“非群集”索引实际上是Range索引。 Hash和Range索引都是非群集的,并且内存中的OLTP表中没有“聚簇”索引(主键被强制实现为聚簇哈希索引)。范围索引是通过修改的B树实现的,你可以在http://research.microsoft.com/pubs/193594/Hekaton%20-%20Sigmod2013%20final.pdf

的sigmod白皮书上阅读更多关于两者的基本细节的信息。