2015-06-09 44 views
0

SQL 2014存儲器表支持兩種類型的索引,散列非聚集的,非clustered.Since存儲器優化的表不被存儲爲行,我們需要有一個索引compulosary.Below是語法創建散列索引在存儲器OLTP散列索引與非聚集

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包含指向數據的內存地址。

但是,當我們創建非聚集索引下面defition

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樹,因爲這個指數不散列和表,索引是在啓動時重新創建。 SQL如何存儲數據。

以下是最好的鏈接和我的分析。

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

回答

1

你所指的「非聚集」指標實際上是範圍索引。哈希和範圍索引都是非集羣索引,並且在內存中的OLTP表中沒有「集羣」索引(主鍵被強制實施爲集羣哈希索引)。範圍索引是通過修改的B樹實現的,您可以在sigmod白皮書http://research.microsoft.com/pubs/193594/Hekaton%20-%20Sigmod2013%20final.pdf

+0

閱讀更多關於兩者的底層細節。謝謝我在網上發現了這個,所以開始閱讀它並想到了解決方案。 – TheGameiswar