SQL Server 2014,表变量上的非聚集索引
从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上却能成功执行!
更进一步,我们还可以用新语法创建复合索引(composite indexes):
1 -- Inline creation of Indexes 2 CREATE TABLE foo2 3 ( 4 Col1 INT PRIMARY KEY CLUSTERED, 5 Col2 INT INDEX idx_Col2 (Col2, Col3), 6 Col3 INT 7 ) 8 GO
之前的版本(我这里是SQL Server 2008R2)只能如下出错提示:
真是酷炫叼炸天了,大家赶紧都去体验下!
参考文章:
https://www.sqlpassion.at/archive/2013/06/26/non-clustered-indexes-on-table-variables-in-sql-server-2014/
转载于:https://www.cnblogs.com/woodytu/p/4607187.html
SQL Server 2014,表变量上的非聚集索引相关推荐
- 三、索引优化(3)聚集索引上的非聚集索引
一.索引结构 在聚集索引上建立非聚集索引,在日常应用中经常发生. <?xml:namespace prefix="[default]" ns="http://www ...
- SQL Server中的联合主键、聚集索引、非聚集索引、mysql 联合索引
我们都知道在一个表中当需要2列以上才能确定记录的唯一性的时候,就需要用到联合主键,当建立联合主键以后,在查询数据的时候性能就会有很大的提升,不过并不是对联合主键的任何列单独查询的时候性能都会提升,但我 ...
- SQL Server修改表名,字段名,索引名
说实话,感觉SQL Server的资料真的好难找(也有可能是很多人在吐槽的CSDN的搜索功能不够强--),我想找个修改表名的方法,结果找了好久,才找到一个可行的,留个纪念,希望也能够帮到你(多个人转发 ...
- SQL Server临界点游戏——为什么非聚集索引被忽略!
当我们进行SQL Server问题处理的时候,有时候会发现一个很有意思的现象:SQL Server完全忽略现有定义好的非聚集索引,直接使用表扫描来获取数据.我们来看看下面的表和索引定义: 1 CREA ...
- SQL Server的聚集索引和非聚集索引
微软的SQL SERVER提供了两种索引:聚集索引(clustered index,也称聚类索引.簇集索引)和非聚集索引(nonclustered index,也称非聚类索引.非簇集索引)-- (一) ...
- sql server 2014预览版发布
MSDN发布sql server2014预览版,如下图: SQL Server 2014新特性: 微软SQL Server部门主管Eron Kelly介绍,通过将交易处理放到内存中进行,新的SQL S ...
- 抢先体验SQL Server 2014 CTP1!
根据微软官方给出的消息,下一版本数据库平台SQL Server 2014将在今年年底发布,其中将包含表粒度级别的内存OLTP功能,而与其他内存数据库不同的是,这一功能将无需昂贵的硬件作为支持. 在本周 ...
- SQL Server 堆表行存储大小(Record Size)
一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 堆表行记录存储格式(Heap) 案例分析(Case) 参考文献(References) 二.背 ...
- SQL Server 聚集索引 clustered index 非聚集索引Nonclustered Indexes键查找查找Key Lookup执行计划过程详解
SQL Server 聚集索引非聚集索引键查找过程详解 索引的相关术语 1 堆(Heap)是一种没有指定排序的数据结构,通俗的理解堆就像是按照顺序排放的杂物.在数据库里也即是对应没有聚集索引. 2 聚 ...
- SQL Server 堆heap 非聚集索引 Nonclustered index 行号键查找RID loopup结合执行计划过程详解
SQL Server 堆型数据与执行计划使用案例 索引的相关术语 1 堆(Heap)是一种没有指定排序的数据结构,通俗的理解堆就像是按照顺序排放的杂物.在数据库里也即是对应没有聚集索引. 2 聚集索引 ...
最新文章
- 鹤峰:美丽的茶乡——人物篇
- 【转】ABP源码分析三十一:ABP.AutoMapper
- 大端字节序与小端字节序的转换
- MoreResult 同事返回多个数据集
- linux下的一些常见命令学习,学习猿地-Linux下的常见命令总结
- Lua初学习 9-13_04 require moudle
- 3dmax软件如何导入光网文件?
- 高通QFIL刷机 安装9008驱动
- java版的mrp模拟器_mrp模拟器(simulator)
- 仿QQ音乐(HTML+CSS)
- 如何免费下载和翻译论文
- CSP201903-1 小中大 (Python)
- VC++获取系统信息/获取OS/获取MAC/获取本地IP/判断是否为网吧
- 2021年中国食糖产销量及重点企业对比分析[图]
- m3u8转mp4,不用格式软件
- Excel学习日记:L12-打印分页
- javascript解数独LeetCod-37
- MySQL数据库学习笔记(2)
- 电子邮件管理系统 android,IM800电子邮件管理系统
- 【转】2008年.Net编程人员工具参照
热门文章
- 鸟类的视力很惊人,如何从高空中发现食物
- PYTHON莫名其妙的崩溃
- 买手机数据线特别要注意的地方
- vscode安卓html扩展,vscode扩展信息.html
- trunc函数_这几个舍入函数你都会用吗?
- execl执行linux命令,Excel 调用Shell命令执行bash脚本和命令行代码
- C++ 10进制字符串转10进制 10进制字符串转换
- mysql primary重复_mysql:键'PRIMARY'和奇怪的ID行为重复条目'0'
- antd的select的滚动条怎么才会出现_纵向滚动条对横向滚动条的影响
- 3项目里面全局用less变量 cli vue_Vue.js构建工具比较