參考文獻:http://www.infoq.com/cn/news/2013/09/Compiled-Queries數據庫
http://www.bianceng.cn/database/SQLServer/201502/48247.htm
SQL Server 2014內存數據庫針對傳統的表和存儲過程引入了新的結構: memory optimized table(內存優化表)和native stored procedure(本地編譯存儲過程)。
內存優化表:
默認狀況下Memory optimized table是徹底持久的(即爲durable memory optimized table),如傳統的基於磁盤的表上的事務同樣,而且徹底持久的事務也是支持原子、一致、隔離和持久 (ACID) 的。所不一樣的是內存優化表的整個表的主存儲是在內存中,即爲從內存讀取表中的行,和更新這些行數據到內存中。 並不是像是傳統基於磁盤的表按照數據庫數據庫頁面裝載數據庫。內存優化表的數據同時還在磁盤上維護着另外一個副本,但僅用於持續性目的。 在數據庫恢復期間,內存優化的表中的數據再次從磁盤裝載。
CREATE TABLE DurableTbl (AccountNo INT NOT NULL PRIMARY KEY NONCLUSTERED HASH WITH (BUCKET_COUNT = 28713) ,CustName VARCHAR(20) NOT NULL ,Gender CHAR NOT NULL ,CustGroup VARCHAR(4) NOT NULL ,Addr VARCHAR(50) NULL ,Phone VARCHAR(10) NULL )
WITH (MEMORY_OPTIMIZED=ON, DURABILITY=SCHEMA_AND_DATA) --持久內存
WITH (MEMORY_OPTIMIZED=ON, DURABILITY=SCHEMA_ONLY)--非持久內存
(除了默認持久的內存優化表以外,還支持non-durable memory optimized table(非持久化內存優化表),不記錄這些表的日誌且不在磁盤上保存它們的數據。 這意味着這些表上的事務不須要任何磁盤 IO,但若是服務器崩潰或進行故障轉移,則沒法恢復數據。)
本地編譯存儲過程
Native compiled stored procedure(本地編譯存儲過程)是針對傳統的存儲過程而言的,是本機編譯存儲過程後生成DLL,因爲本機編譯是指將編程構造轉換爲本機代碼的過程,這些代碼由處理器指令組成,無需進一步編譯或解釋。與傳統TSQL 相比,本機編譯可提升訪問數據的速度和執行查詢的效率。故經過本機編譯的存儲過程,可在存儲過程當中提升查詢和業務邏輯處理的效率。
語法
CREATE PROCEDURE dbo.NativeSP_Online
@sAccount nvarchar(100)
WITH NATIVE_COMPILATION, SCHEMABINDING, EXECUTE AS OWNER
AS
BEGIN ATOMIC WITH (TRANSACTION ISOLATION LEVEL = SNAPSHOT, LANGUAGE = N'English')
BEGIN
END
END
GO
注意:1,本地編譯存儲過程不能用子查詢,不能用union,不能用非內存優化表
內存數據庫既能夠包含內存優化表和本地編譯存儲過程,又能夠包含基於磁盤的表和傳統存儲過程