Sql server2014 内存优化表 本地编译存储过程
2017-09-11 16:56
246 查看
参考文献: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) 的。所不同的是内存优化表的整个表的主存储是在内存中,即为从内存读取表中的行,和更新这些行数据到内存中。 并非像是传统基于磁盘的表按照数据库数据库页面装载数据库。内存优化表的数据同时还在磁盘上维护着另一个副本,但仅用于持续性目的。 在数据库恢复期间,内存优化的表中的数据再次从磁盘装载。
(除了默认持久的内存优化表之外,还支持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,不能用非内存优化表
内存数据库既可以包含内存优化表和本地编译存储过程,又可以包含基于磁盘的表和传统存储过程
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,不能用非内存优化表
内存数据库既可以包含内存优化表和本地编译存储过程,又可以包含基于磁盘的表和传统存储过程
相关文章推荐
- Sql server2014 内存优化表 本地编译存储过程
- SQL Server ->> Natively Compiled Stored Procedures(本地编译存储过程)
- SQL Server 2005用存储过程从服务器中导出数据到本地自己的数据库
- SQL SERVER 2014 内存优化表迁移
- SQL Server 2014 内存优化表(1)实现内存优化表
- SQL Server 2014中的本机编译表
- SQL Server 2014内存优化表的使用场景
- SQL Server 2014内存优化表的使用场景_0
- 黑马程序员--SQL Server 建库、表、存储过程代码实例
- SQL Server 2005分页存储过程
- Java/JSP中调用SQL Server存储过程完整示例
- SQL Server利用RowNumber()内置函数与Over关键字实现通用分页存储过程(支持单表或多表结查集分页)
- 远程连接SQL Server 2014遇到的问题和解决
- SQL SERVER 2008不能连接本地服务器的一种解决方法
- 将Java应用程序本地编译为EXE的几种方法
- SQL Server 存储过程
- SQL Server 2014 数据表中如何添加和实现自动增长的序列号
- 在SQL Server 2005中用存储过程实现搜索功能
- C++操作存储过程 2014 问题 MySQL