使用解释型 Transact-SQL 访问内存优化表
只有少数例外,可以使用任何 Transact-SQL 查询或 DML 操作访问内存优化表, (SELECT、INSERT、UPDATE 或 DELETE) 、即席批处理和 SQL 模块(如存储过程、表值函数、触发器和视图)。
解释的 Transact-SQL 是指本机编译的存储过程以外的 Transact-SQL 批处理或存储过程。 对内存优化表的解释性 Transact-SQL 访问称为互操作访问。
内存优化表还可使用本机编译的存储过程访问。 建议将本机编译的存储过程用于对性能至关重要的 OLTP 操作。
对于以下方案,建议使用解释的 Transact-SQL 访问:
即席查询和管理任务。
报表查询,通常使用本机编译的存储过程中不可用的构造(如窗口函数)。
要将应用程序中对性能至关重要的部分迁移到内存优化表,只需极少的应用程序代码更改(或无需更改)。 通过迁移表可能会提高性能。 如果随后将存储过程迁移到本机编译的存储过程,则可以进一步提高性能。
当 Transact-SQL 语句不可用于本机编译的存储过程时。
访问内存优化表中数据的已解释 Transact-SQL 存储过程不支持以下 Transact-SQL 构造。
区域 | 不支持 |
---|---|
访问表 | TRUNCATE TABLE MERGE(使用内存优化的表作为目标) 动态和键集游标(这些会自动降级为静态)。 使用上下文连接从 CLR 模块访问。 从索引视图引用内存优化表。 |
跨数据库 | 跨数据库查询 跨数据库事务 链接服务器 |
表提示
有关表提示的详细信息,请参阅。 (Transact-SQL) 的表提示 。 添加了 SNAPSHOT 隔离以支持In-Memory OLTP。
使用解释的 Transact-SQL 访问内存优化表时,不支持下表提示。
HOLDLOCK | IGNORE_CONSTRAINTS | IGNORE_TRIGGERS | NOWAIT |
PAGLOCK | READCOMMITTED | READCOMMITTEDLOCK | READPAST |
READUNCOMMITTED | ROWLOCK | SPATIAL_WINDOW_MAX_CELLS = integer | TABLOCK |
TABLOCKXX | UPDLOCK | XLOCK |
使用解释的 Transact-SQL 从显式或隐式事务访问内存优化表时,必须包含隔离级别表提示(如 SNAPSHOT、REPEATABLEREAD 或 SERIALIZABLE),或者可以使用 MEMORY_OPTIMIZED_ELEVATE_TO_SNAPSHOT。 有关详细信息,请参阅 使用 Memory-Optimized 表的事务隔离级别指南 和 ALTER DATABASE SET 选项 (Transact-SQL) 。
注意
由在自动提交模式下运行的查询访问的内存优化表不需要隔离级别表提示。