Sql-Server

SQL Server - 包含使用者定義表類型的非聚集索引?

  • July 30, 2018

我正在使用記憶體中的使用者定義的表類型,並且一直在為它們創建索引。

這是我想做的事情:

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,然後在頁面上的插槽表中定位目標行並到達那裡。In-Memory 索引的行定位器是一個指針。跟隨一個指針需要一個 CPU 指令和一個主記憶體讀取,在 100ns-1000ns 範圍內的某個地方。

引用自:https://dba.stackexchange.com/questions/213322