首页 > 数据库 > mysql教程 > SQL Server 不同版本中表变量的索引功能有何变化?

SQL Server 不同版本中表变量的索引功能有何变化?

Barbara Streisand
发布: 2025-01-12 21:41:47
原创
479 人浏览过

How Have Indexing Capabilities for Table Variables Changed in SQL Server Across Different Versions?

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 为重复项添加唯一标识符)。
    • 可以通过使用约束指定 CLUSTERED/NONCLUSTERED 来覆盖。
  • 非聚集索引:

    • 可以是唯一索引或非唯一索引(SQL Server 为非唯一索引添加行定位器)。
    • 也可像聚集索引一样被覆盖。

在表变量上实现索引

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

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板