SQLServer2016 之后增加了索引列数的限制 从 16个列 增加到了 32个列
创建带有包含列的索引
https://docs.microsoft.com/zh-cn/sql/relational-databases/indexes/create-indexes-with-included-columns?view=sql-server-2017
适用于:
SQL Server
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格式档案读和写的功能. 下面这篇文章给大家介 ...
随机推荐
- ubuntu集群下ssh配置总结
最重要的前提就是:集群中的所有机器的用户名和用户组必须一样 一般做法都是在每台机器上新建用户组和用户名. 比如:sudo addgroup sparks 新建用户组sparks: sudo addus ...
- (转)Spring Boot (十):邮件服务
http://www.ityouknow.com/springboot/2017/05/06/spring-boot-mail.html Spring Boot 仍然在狂速发展,才几个多月没有关注,现 ...
- D. Diverse Garland Codeforces Round #535 (Div. 3) 暴力枚举+贪心
D. Diverse Garland time limit per test 1 second memory limit per test 256 megabytes input standard i ...
- Java基础知识点(三)
前言:准备将Java基础知识点总结成一个系列,用于平常复习并加深理解.每篇尽量做到短小精悍,便于阅读. 1.Math类中相关函数 Math.floor(x):返回不大于x的最大整数.eg:Math.f ...
- 只有 assignment、call、increment、decrement 和 new 对象表达式可用作语句
错误信息:只有 assignment.call.increment.decrement 和 new 对象表达式可用作语句: 分析:发生这种情况一般是在赋值时把“=”写成了“==”,例如:textBox ...
- centos7下安装docker(15.8docker跨主机容器通信总结)
性能:underlay网络的性能优于overlay.Overlay网络利用隧道技术,将数据包封装到UDP中进行传输,由于涉及数据包的封装和解封,存在额外的CPU和网络的开销,虽然几乎所有overlay ...
- 【vue】使用el-table时,实现批量选中效果
简单demo ①页面: <template> <el-table ref="multipleTable" :data="tableData3" ...
- Home Assistant-自动化设备
触发器(trigger) 条件(condition) 动作(action) 自动化中的模板(template) 触发器(trigger) 时间(time)触发器时间触发器在指定的时间触发规则,可以是某 ...
- 2018.11.10 FCC java分享大会
一.<android热修复背后的java技术> 1.类是如何被jvm加载的 (1)由类加载器加载 (2)类加载器分类,基于双亲委派原则(建议) (3)关键代码 先去判断是否已经加载,如果没 ...
- [MicroPython]TPYBoard开发板DIY小型家庭气象站
对于喜欢登山的人来说,都会非常关心自己所处的高度跟温度,海拔高度的测量方法,海拔测量一般常用的有两种方式,一是通过GPS全球定位系统,二是通过测出大气压,根据气压值算出海拔高度. BMP180是一直常 ...