使用解释型 Transact-SQL 访问内存优化表
适用于: SQL Server Azure SQL 数据库 Azure Synapse Analytics 分析平台系统 (PDW)
除了少数例外情况,可以使用任何 Transact-SQL 查询或 DML 操作(选择、插入、更新或删除)、即席批处理和 SQL 模块(如存储过程、表值函数、触发器和视图)来访问内存优化表。
解释型 Transact-SQL 指 Transact-SQL 批处理或是非本机编译的存储过程的存储过程。 对内存优化表的解释型 Transact-SQL 访问称为互操作访问。
从 SQL Server 2016 (13.x) 开始,经解释的 Transact-SQL 中的查询能够以并行模式而不只是串行模式扫描内存优化表。
内存优化表还可使用本机编译的存储过程访问。 建议将本机编译的存储过程用于对性能至关重要的 OLTP 操作。
建议将解释型 Transact-SQL 访问用于以下情况:
即席查询和管理任务。
报表查询,通常使用本机编译的存储过程中不可用的构造(如 window 函数,有时称为 OVER 函数)。
要将应用程序中对性能至关重要的部分迁移到内存优化表,只需极少的应用程序代码更改(或无需更改)。 通过迁移表可能会提高性能。 如果随后将存储过程迁移到本机编译的存储过程,则可以进一步提高性能。
当 Transact-SQL 语句不可用于本机编译的存储过程时。
不过,访问内存优化表中的数据的解释型 Transact-SQL 存储过程中不支持以下 Transact-SQL 构造。
区域 | 不支持 |
---|---|
访问表 | TRUNCATE TABLE MERGE(使用内存优化的表作为目标) 动态和键集游标(这些会自动降级为静态)。 使用上下文连接从 CLR 模块访问。 从索引视图引用内存优化表。 |
跨数据库 | 跨数据库查询 跨数据库事务 链接服务器 |
表提示
有关表提示的详细信息,请参阅。 表提示 (Transact-SQL)。 添加了 SNAPSHOT 以支持内存中 OLTP。
使用解释型 Transact-SQL 访问内存优化表时,不支持以下表提示。
HOLDLOCK
PAGLOCK
READUNCOMMITTED
TABLOCKXX
IGNORE_CONSTRAINTS
READCOMMITTED
ROWLOCK
UPDLOCK
IGNORE_TRIGGERS
READCOMMITTEDLOCK
SPATIAL_WINDOW_MAX_CELLS = integer
XLOCK
NOWAIT
READPAST
TABLOCK
使用经解释的 Transact-SQL 从显式或隐式事务中访问内存优化表时,你必须至少执行下列操作之一:
指定 隔离级别表提示 ,例如 SNAPSHOT、REPEATABLEREAD 或 SERIALIZABLE。
将数据库选项 MEMORY_OPTIMIZED_ELEVATE_TO_SNAPSHOT 设置为 ON。
由在 自动提交模式下运行的查询访问的内存优化表不需要隔离级别表提示。