使用解譯的 Transact-SQL 存取經記憶體最佳化的資料表

適用於: SQL Server Azure SQL Database Not supported. Azure Synapse Analytics Not supported. Analytics Platform System (PDW)

除了少數例外,您可以使用任何 Transact-SQL 查詢或 DML 作業 (選取、插入、更新或刪除)、特定批次和 SQL 模組 (例如預存程序、資料表值函式、觸發程序和檢視) 存取經記憶體最佳化的資料表。

解譯的 Transact-SQL 是指原生編譯的預存程序以外的 Transact-SQL 批次或預存程序。 對經記憶體最佳化的資料表進行解譯的 Transact-SQL 存取稱為互通存取。

從 SQL Server 2016 (13.x) 開始,解譯的 Transact-SQL 中的查詢可以平行掃描經記憶體最佳化的資料表,而不只是在序列模式中。

可以使用原生編譯的預存程序存取經記憶體最佳化的資料表。 建議針對效能關鍵的 OLTP 作業使用原生編譯預存程序。

針對以下案例,建議使用解譯的 Transact-SQL 存取:

  • 特定查詢和管理工作。

  • 報告查詢,通常使用原生編譯的預存程序中不可用的建構 (例如視窗函式,有時稱為 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 = 整數

XLOCK

NOWAIT

READPAST

TABLOCK

使用解譯的 Transact-SQL 從明確或隱含交易存取經記憶體最佳化的資料表時,必須至少執行以下操作之一:

對於在自動認可模式下執行的查詢存取的經記憶體最佳化的資料表,不需要隔離等級資料表提示。

另請參閱

記憶體內部 OLTP 的 Transact-SQL 支援

移轉至 In-Memory OLTP