SQL 2014内存表支持两种类型的索引,哈希非聚集,非clustered.Since内存优化表不存储为行,需要有一个索引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树存储的,因为这个索引没有散列,而且表、索引是在startup.How上重新创建的。
下面是最好的链接和我的分析为远。
http://www.mssqltips.com/sqlservertip/3099/understanding-sql-server-memoryoptimized-tables-hash-indexes/
发布于 2015-06-16 14:45:46
您所指的“非聚集”索引实际上是范围索引。Hash和Range索引都是非聚集的,内存中的OLTP表中没有“聚集”索引(主键强制实现为聚集散列索引)。范围索引是通过修改的B-树实现的,您可以在http://research.microsoft.com/pubs/193594/Hekaton%20-%20Sigmod2013%20final.pdf的sigmod白皮书上更多地了解这两种索引的基本细节。
https://stackoverflow.com/questions/30729353
复制相似问题