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中文网其他相关文章!