インメモリのユーザー定義テーブルタイプを使用していて、それらにインデックスを作成することに行き詰まりました。
これが私がやろうとしていることです:
CREATE TYPE dbo.CustomersTbl
AS TABLE
(
customerID int NOT NULL,
customerName nvarchar(100),
customerAddress nvarchar(100),
customerCity nvarchar(100),
customerEmail nvarchar(100)
INDEX IDX1 NONCLUSTERED (customerID) INCLUDE(customerName,customerAddress,customerCity)
)
WITH
(MEMORY_OPTIMIZED = ON);
INCLUDE
部分を含めない場合、これは正常に機能します。
これが標準のテーブルである場合、INCLUDE
を使用してインデックスを作成します。
だから私の質問、INCLUDE
を使用してユーザー定義テーブルタイプにそのインデックスを作成する方法はありますか、それとも私が作成したくない理由があるのでしょうか?これらのテーブルタイプを使用して、メモリ内のテーブル変数を作成しています。
現在SQL Server 2017を使用しています。
INCLUDE
は、メモリ最適化テーブルまたはテーブル変数ではサポートされていません。これらのオブジェクトの場合、INCLUDE
の目的は重要ではありません。メモリ内の行の場所に到達すると、すべての列が利用可能になるためです。
メモリ最適化インデックスは本質的にカバーしています、 メモリ最適化インデックスのガイドライン を参照してください
ディスクベースのインデックスは、RIDまたはクラスター化インデックスキーのいずれかである行ロケーターを使用し、これらのコスト1〜4の論理IOに従って、ページのスロットテーブルでターゲット行を検索し、そこに移動します。インメモリインデックスの行ロケーターはポインターです。ポインタをたどると、100ns〜1000nsの範囲のどこかで、単一のCPU命令とメインメモリの読み取りにコストがかかります。