索引中include的魅力(具有包含性列的索引)

索引中include的魅力(具有包含性列的索引)

ID:8871378

大小:47.06 KB

页数:0页

时间:2018-04-10

索引中include的魅力(具有包含性列的索引)_第页
预览图正在加载中,预计需要20秒,请耐心等待
资源描述:

《索引中include的魅力(具有包含性列的索引)》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、开文之前首先要讲讲几个概念【覆盖查询】  当索引包含查询引用的所有列时,它通常称为“覆盖查询”。【索引覆盖】  如果返回的数据列就包含于索引的键值中,或者包含于索引的键值+聚集索引的键值中,那么就不会发生BookupLookup,因为找到索引项,就已经找到所需的数据了,没有必要再到数据行去找了。这种情况,叫做索引覆盖;【复合索引】  和复合索引相对的就是单一索引了,就是索引只包含一个字段,所以复合索引就是包含两个或者多个字段的索引;【非键列】  键列就是在索引中所包含的列,当然非键列就是该索引之外的列了;【摘要1】  在 SQL Server 2005 中,可以通过将非键

2、列添加到非聚集索引的叶级别来扩展非聚集索引的功能。通过包含非键列,可以创建覆盖更多查询的非聚集索引。这是因为非键列具有下列优点:    * 它们可以是不允许作为索引键列的数据类型。    * 在计算索引键列数或索引键大小时,数据库引擎不考虑它们。  当查询中的所有列都作为键列或非键列包含在索引中时,带有包含性非键列的索引可以显著提高查询性能。这样可以实现性能提升,因为查询优化器可以在索引中找到所有列值;不访问表或聚集索引数据,从而减少磁盘 I/O 操作。说明:第一:只能是针对非聚集索引;第二:比起复合索引是有性能上的提升的,因为索引的大小变小了;【摘要2】  键列存储在索

3、引的所有级别中,而非键列仅存储在叶级别中。说明:这就表现为包含与不包含的关系了。有关索引级别的详细信息,请参阅表组织和索引组织。【摘要3】  使用包含性列以避免大小限制  可以将非键列包含在非聚集索引中,以避免超过当前索引大小的限制(最大键列数为 16,最大索引键大小为 900 字节)。数据库引擎计算索引键列数或索引键大小时,不考虑非键列。  例如,假设要为 AdventureWorks 示例数据库的 Document 表中的以下列建立索引:     Title nvarchar(50)     Revision nchar(5)     FileName nvarcha

4、r(400)  因为 nchar 和 nvarchar 数据类型的每个字符需要 2 个字节,所以包含这三列的索引将超出 900 字节的大小限制 10 个字节 (455 * 2)。使用 CREATE INDEX 语句的 INCLUDE 子句,可以将索引键定义为 (Title, Revision),将 FileName 定义为非键列。这样,索引键大小将为 110 个字节 (55 * 2),并且索引仍将包含所需的所有列。下面的语句就创建了这样的索引。说明:当你把一个nvarchar(500)的字段设置为主键的时候,你就可以看到不能超出900字节的提示了。一般来说我们是不太会做这

5、些操作的,所以那个错误提示也是不常见的,也许你可能还见过。一个数据页的大小才8k,所以我们合理的设置每个字段的大小,不要浪费太多的空间,这样对查询也是有好处的,这个include就比较好的的解决了索引和空间的问题,虽然那些include的数据也会占用空间。虽然可以设置include,但是也尽量不要使用太多的字段作为索引包含的非键列。【摘要4】  带有包含性列的索引准则  设计带有包含性列的非聚集索引时,请考虑下列准则:    * 在 CREATE INDEX 语句的 INCLUDE 子句中定义非键列。    * 只能对表或索引视图的非聚集索引定义非键列。    * 除 t

6、ext、ntext 和 image 之外,允许所有数据类型。    * 精确或不精确的确定性计算列都可以是包含性列。有关详细信息,请参阅为计算列创建索引。    * 与键列一样,只要允许将计算列数据类型作为非键索引列,从 image、ntext 和 text 数据类型派生的计算列就可以作为非键(包含性)列。    * 不能同时在 INCLUDE 列表和键列列表中指定列名。    * INCLUDE 列表中的列名不能重复。说明:include不能使用在聚集索引中。后面的两点,这个在实际中很难想象会有这样的需求要把重复列放到一个索引中。如果有朋友遇到过这样的需求可以告知一些,

7、不胜感激。那如果有是否可以通过不同的列名(其实保存是同样的值)来解决这个问题呢??【摘要5】  列大小准则    * 必须至少定义一个键列。最大非键列数为 1023 列。也就是最大的表列数减 1。    * 索引键列(不包括非键)必须遵守现有索引大小的限制(最大键列数为 16,总索引键大小为 900 字节)。    * 所有非键列的总大小只受 INCLUDE 子句中所指定列的大小限制;例如,varchar(max) 列限制为 2 GB。说明:varchar(max)这样的定义是在2005之后才有的,所以这些数值也是对2005后

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。