SQL Server 2014,表变量上的非聚集索引

发表于:2015-7-01 10:02

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:woodytu    来源:51Testing软件测试网采编

  从Paul White的推特上看到,在SQL Server 2014里,对于表变量(Table Variables),它是支持非唯一聚集索引(Non-Unique Clustered Indexes)和非聚集索引(Non-Clustered Indexes)的。看到这个,我决定在自己的虚拟机里尝试下,因为这将是个卓越的功能。表变量很棒,因为用它可以避免过多的重编译(excessive recompilations)。当你创建它们时,它们是没有统计信息,你不会改变数据库架构。它们只是变量,但在TempDb里还是常驻的。
  表变量的一个缺点是,你不能在上面创建非聚集索引,这个在处理大量数据集时是不好的。但SQL Server 2014 CTP1已经修正了这个缺点。来看下面的代码(点击工具栏的显示包含实际的执行计划):
1 DECLARE @tempTable TABLE
2 (
3    ID INT IDENTITY(1, 1) PRIMARY KEY,
4    FirstName CHAR(100) INDEX idx_FirstName,
5    LastName CHAR(100)
6 )
7
8 INSERT INTO @TempTable (FirstName, LastName)
9 SELECT TOP 100000 name, name FROM master.dbo.syscolumns
10
11 SELECT FirstName FROM @TempTable
12 WHERE FirstName = 'cid'
13 GO
  我们来看下SELECT语句的执行计划,SQL Server执行了非聚集索引扫描运算符(Non-Clustered Index Seek operator)。也就是说,我们可以在表变量上定义额外的非聚集索引。每个创建的非聚集索引是没有统计信息。这个功能很酷哦,在常规数据库表的简单语法(easy syntax)也支持。我们来看下面的表定义:
  1 CREATE TABLE foo
  2 (
  3     Col1 INT PRIMARY KEY CLUSTERED,
  4     Col2 INT INDEX idx_Col2,
  5     Col3 INT INDEX idx_Col3
  6 )
  7 GO
  这个在SQL Server 2008R2上会提示如下错误:
  在SQL Server 2014上却能成功执行!
21/212>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号