SQLServer2016 之后增加了索引列数的限制 从 16个列 增加到了 32个列
创建带有包含列的索引
https://docs.microsoft.com/zh-cn/sql/relational-databases/indexes/create-indexes-with-included-columns?view=sql-server-2017
适用于: SQL Server
SQL Server Azure SQL 数据库
Azure SQL 数据库 Azure SQL 数据仓库
Azure SQL 数据仓库 并行数据仓库
并行数据仓库
本主题说明如何通过使用 SQL Server 或 SQL Server Management Studio ,添加包含列(或非键列)以便在 Transact-SQL中扩展非聚集索引的功能。 通过包含非键列,可以创建覆盖更多查询的非聚集索引。 这是因为非键列具有下列优点:
- 它们可以是不允许作为索引键列的数据类型。 
- 在计算索引键列数或索引键大小时, 数据库引擎 不考虑它们。 
当查询中的所有列都作为键列或非键列包含在索引中时,带有包含性非键列的索引可以显著提高查询性能。 这样可以实现性能提升,因为查询优化器可以在索引中找到所有列值;不访问表或聚集索引数据,从而减少磁盘 I/O 操作。
备注
当索引包含查询引用的所有列时,它通常称为“覆盖查询”。
开始之前
设计建议
- 重新设计索引键大小较大的非聚集索引,以便只有用于搜索和查找的列为键列。 使覆盖查询的所有其他列成为非键列。 这样,将具有覆盖查询所需的所有列,但索引键本身较小,而且效率高。 
- 将非键列包含在非聚集索引中,以避免超过当前索引大小的限制(最大键列数为 32,最大索引键大小为 1,700 字节,而在 SQL Server 2016 (13.x) 以前,最大键列数为 16,最大索引键大小为 900 字节)。 数据库引擎 计算索引键列数或索引键大小时,不考虑非键列。 
限制和局限
- 只能对非聚集索引定义非键列。 
- 除了 text、 ntext和 image 之外的所有数据类型都可以用作非键列。 
- 精确或不精确的确定性计算列都可以是非键列。 有关详细信息,请参阅 计算列上的索引。 
- 只要允许将计算列数据类型作为非键索引列,从 image、 ntext和 text 数据类型派生的计算列就可以作为非键索引列。 
- 除非先删除某一表的索引,否则无法从该表中删除非键列。 
- 除进行下列更改外,不能对非键列进行其他更改: - 将列的为空性从 NOT NULL 改为 NULL。 
- 增加 varchar、 nvarchar或 varbinary 列的长度。 
 
安全性
Permissions
要求对表或视图具有 ALTER 权限。 用户必须是 sysadmin 固定服务器角色的成员,或者是 db_ddladmin 和 db_owner 固定数据库角色的成员。
使用 SQL Server Management Studio
创建带有非键列的索引
- 在对象资源管理器中,单击加号以便展开包含您要创建带有非键列的索引的表的数据库。 
- 单击加号以便展开 “表” 文件夹。 
- 单击加号以便展开您要创建带有非键列的索引的表。 
- 右键单击“索引”文件夹,指向“新建索引”,然后选择“非群集索引…”。 
- 在 “新建索引” 对话框的 “常规” 页中,在 “索引名称” 框中输入新索引的名称。 
- 在“索引键列”选项卡下,单击“添加…”。 
- 在“从 table_name 中选择列”对话框中,选中要添加到索引的一个或多个表列的复选框。 
- 单击“确定” 。 
- 在“包含性列”选项卡下,单击“添加…”。 
- 在“从 table_name 中选择列”对话框中,选中要作为非键列添加到索引的一个或多个表列的复选框。 
- 单击“确定” 。 
- 在 “新建索引” 对话框中,单击 “确定”。 
使用 Transact-SQL
创建带有非键列的索引
- 在 “对象资源管理器” 中,连接到 数据库引擎的实例。 
- 在标准菜单栏上,单击 “新建查询”。 
- 将以下示例复制并粘贴到查询窗口中,然后单击“执行” 。 SQL复制- USE AdventureWorks2012;
 GO
 -- Creates a nonclustered index on the Person.Address table with four included (nonkey) columns.
 -- index key column is PostalCode and the nonkey columns are
 -- AddressLine1, AddressLine2, City, and StateProvinceID.
 CREATE NONCLUSTERED INDEX IX_Address_PostalCode
 ON Person.Address (PostalCode)
 INCLUDE (AddressLine1, AddressLine2, City, StateProvinceID);
 GO
SQLServer2016 之后增加了索引列数的限制 从 16个列 增加到了 32个列的更多相关文章
- Java获得数据库查询结果的列数和行数,打印查询结果
		Java连接数据库及简单操作见我以前的一篇随笔:http://www.cnblogs.com/meitian/p/5036332.html 一.获取查询结果的行数和列数 查询结果为ResultSe ... 
- StringGrid  实例2:1、获取 StringGrid 的行数、列数; 2、给单元赋值.
		实例2: 本例功能: 1.获取 StringGrid 的行数.列数; 2.给单元赋值. 运行效果图: 
- DataSet 取值,DataSet行数,DataSet列数 从DataSet中取出特定值
		1 DataSet.Table[0].Rows[ i ][ j ] 其中i 代表第 i 行数, j 代表第 j 列数 2 DataSet.Table[0].Rows[ i ].ItemArray[ j ... 
- Android中动态设置GridView的列数、列宽和行高
		在使用GridView时我们知道,列数是可以通过设计时的属性来设置的,列的宽度则是根据列数和GridView的宽度计算出来的.但是有些时候我们想实现列数是动态改变的效果,即列的宽度保持某个值,列的数量 ... 
- 学习笔记13—python DataFrame获取行数、列数、索引及第几行第几列的值
		1. df=DataFrame([{‘A’:’11’,’B’:’12’},{‘A’:’111’,’B’:’121’},{‘A’:’1111’,’B’:’1211’}]) print df.column ... 
- python DataFrame获取行数、列数、索引及第几行第几列的值
		print df.columns.size#列数 2 print df.iloc[:,0].size#行数 3 print df.ix[[0]].index.values[0]#索引值 0 print ... 
- android手机旋转屏幕时让GridView的列数与列宽度自适应
		无意中打开了一年前做过的一个android应用的代码,看到里面实现的一个小功能点(如题),现写篇文章做个笔记.当时面临的问题是,在旋转屏幕的时候需要让gridview的列数与宽度能自适应屏幕宽度,每个 ... 
- POI获取Excel列数和行数的方法
		//获取指定行,索引从0开始 hssfRow=hssfSheet.getRow(1); //获取指定列,索引从0开始 hssfCell=hssfRow.getCell((short)6);//获取总行 ... 
- JAVA使用POI获取Excel的列数与行数
		Apache POI 是用Java编写的免费开源的跨平台的 Java API,Apache POI提供API给Java程式对Microsoft Office格式档案读和写的功能. 下面这篇文章给大家介 ... 
随机推荐
- 【Python语言】Python介绍
			目前在大数据的行业中有3种语言:1. Java ---> 用于大数据工程2. Scala ---> 用于大数据工程和数据科学3.Python ---> 用于数据科学 Python是一 ... 
- TCP连接与断开详解(socket通信)
			http://blog.csdn.net/Ctrl_qun/article/details/52518479 一.TCP数据报结构以及三次握手 TCP(Transmission Control Pro ... 
- 在Linux上编译Hadoop-2.4.0实践与总结
			问题导读: 1.编译源码前需要安装哪些软件? 2.安装之后该如何设置环境变量? 3.为什么不要使用JDK1.8? 4.mvn package -Pdist -DskipTests -Dtar的作用是什 ... 
- 完美集群监控组合ganglia和nagios
			Ganglia是伯克利开发的一个集群监控软件.可以监视和显示集群中的节点的各种状态信息,比如如:cpu .mem.硬盘利用率, I/O负载.网络流量情况等,同时可以将历史数据以曲线方式通过php页面呈 ... 
- ES5-ES6-ES7_数组的扩展
			Array.prototype.indexOf(value) 得到值在数组中的第一个下标,如果元素不存在返回-1,可以用来判断是否包含指定的元素 var arr = [6,5,4,3,1,7,6]; ... 
- node基础—global对象(全局对象)
			global对象的__filename属性和__dirname属性 __filename属性:返回当前执行的文件的文件路径,该路径是经过解析后的绝对路径,在模块中,该路径是模块文件的路径,此属性并非全 ... 
- 【转】用ffmpeg转多音轨的mkv文件
			命令: ffmpeg -i AmericanCaptain.mkv -map 0:v -vcodec copy -map 0:a:1 -acodec copyAmericanCaptain.mp4 - ... 
- web基础之http
			目录 1.Http协议介绍 Http工作原理 http的请求方法 http的响应响应状态码 状态码的类别 常用HTTP状态码简要介绍 用户访问网站携带的参数,以及服务端返回的参数 (http请求报文 ... 
- hdu4966 GGS-DDU
			hdu4966 GGS-DDU 有 \(n\) 个课程,每种课程有 \(a_i\) 级,一开始你每种课程都为 \(0\) 级,有 \(m\) 个升级方案:\((x,\ l1,\ y,\ l2,\ c) ... 
- Android自定义相机拍照并使用CardView展示
			直接上完整代码:在Android Studio新建一个项目,然后依次创建: 1.预先在drawable文件夹中保存的图片资源 2.创建:CameraPreView.java类: 3.创建:OnClic ... 
