SQL Server 表變數索引:SQL Server 2000 與現代版本的比較
SQL Server 2014 及更高版本
在 SQL Server 2014 及更高版本中,可以在聲明表變數時直接內聯指定非唯一索引:
<code class="language-sql">DECLARE @T TABLE ( C1 INT INDEX IX1 CLUSTERED, C2 INT INDEX IX2 NONCLUSTERED, INDEX IX3 NONCLUSTERED(C1,C2) );</code>
SQL Server 2016 進一步允許對錶變數使用過濾索引:
<code class="language-sql">DECLARE @T TABLE ( c1 INT NULL INDEX ix UNIQUE WHERE c1 IS NOT NULL )</code>
SQL Server 2000-2012
在 SQL Server 2000-2012 中,只能透過約束來為表格變數建立索引:
<code class="language-sql">DECLARE @TEMPTABLE TABLE ( [ID] [INT] NOT NULL PRIMARY KEY, [Name] [NVARCHAR] (255) COLLATE DATABASE_DEFAULT NULL, UNIQUE NONCLUSTERED ([Name], [ID]) ) </code>
傳統上,表具有聚集索引或是非聚集堆:
聚集索引:
非聚集索引:
在表格變數上實作索引
在 SQL Server 2000-2012 中,可以透過約束隱式建立下列類型的表變數索引:
索引类型 | 能否创建 |
---|---|
唯一聚集索引 | 是 |
非聚集堆上的唯一索引 | 是 |
聚集索引上的唯一非聚集索引 | 是 |
例如,原始範例中 Name 欄位上的非唯一非聚集索引可以透過 Name 和 ID 上的唯一索引來模擬:
<code class="language-sql">DECLARE @TEMPTABLE TABLE ( [ID] [int] NOT NULL PRIMARY KEY ,[Name] [nvarchar] (255) COLLATE DATABASE_DEFAULT NULL )</code>
以上是SQL Server 不同版本中表格變數的索引功能有何變化?的詳細內容。更多資訊請關注PHP中文網其他相關文章!