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)--非持久内存



本地编译存储过程



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,不能用非内存优化表



 



 



内存数据库既可以包含内存优化表和本地编译存储过程,又可以包含基于磁盘的表和传统存储过程