time 
设为首页】【收藏本站

白小姐透特2017年正版: 白小姐彩图

当前位置: 白小姐彩图 > 数据库 > SQL Server > SQL 基础 > SQL Server索引和表体系结构(三)具有包含列的索引

SQL Server索引和表体系结构(三)具有包含列的索引

时间:2014-06-13 16:11 点击:4195次 字体:[ ]




白小姐彩图 www.5vq5o.cn 包含列索引

概述

包含列索引也是非聚集索引,索引结构跟聚集索引结构是一样,有一点不同的地方就是包含列索引的非键列只存储在叶子节点;包含列索引的列分为键列和非键列,所谓的非键列就是INCLUDE中包含的列,至少需要有一个键列,且键列和非键列不允许重复,非键列最多允许1023列(也就是表的最多列-1),由于索引键列(不包括非键)必须遵守现有索引大小的限制(最大键列数为 16,总索引键大小为 900 字节)的要求所以引进了包含列索引。

正文

  • 创建包含列索引

 

  1. ----创建表  
  2. CREATE TABLE [dbo].[Customers](  
  3.     [custid] [int] IDENTITY(1,1) NOT NULL,  
  4.     [companyname] [nvarchar](40) NOT NULL,  
  5.     [contactname] [nvarchar](30) NOT NULL,  
  6.     [contacttitle] [nvarchar](400) NOT NULL,  
  7.  CONSTRAINT [PK_Customers] PRIMARY KEY CLUSTERED   
  8. (  
  9.     [custid] ASC 
  10. )WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ONON [PRIMARY]  
  11. ON [PRIMARY]  
  12.  
  13. ----创建包含列索引  
  14. CREATE NONCLUSTERED INDEX [IX1_Customers] ON [dbo].[Customers]   
  15. (  
  16.     [companyname] ASC 
  17. )  
  18. INCLUDE ( [contactname])  
  19. WITH (STATISTICS_NORECOMPUTE  = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ONON [PRIMARY]  
  20. GO  
  21.  
  22. 这里的键列就是:companyname  
  23. 非键列就是:contactname  
  24. 非键列具有下列优点:  
  25.  
  26.  
  27. 它们可以是不允许作为索引键列的数据类型。   
  28.  
  29.  
  30. 在计算索引键列数或索引键大小时,数据库引擎不考虑它们。 

当查询中的所有列都作为键列或非键列包含在索引中时,带有包含性非键列的索引可以显著提高查询性能。这样可以实现性能提升,因为查询优化器可以在索引中找到所有列值;不访问表或聚集索引数据,从而减少磁盘 I/O 操作。(当索引包含查询引用的所有列时,它通常称为“覆盖查询”。)

  • 创建覆盖查询

 覆盖查询就是创建的索引列包含查询所引用的所有列时

  1. 查询列都设为键列

 

  1. 当我们的SELECT查询是这样的  
  2. SELECT   
  3.        [companyname]  
  4.       ,[contactname]  
  5.       ,[contacttitle]  
  6.   FROM [chenmh].[dbo].[Customers]  
  7.   where companyname='好孩子' 
  8.     
  9.     
  10. ---这时我们选择将索引列都包含在索引建列中    
  11. CREATE NONCLUSTERED INDEX [IX2_Customers] ON [dbo].[Customers]   
  12. (  
  13.         
  14.        [companyname] ASC 
  15.       ,[contactname] ASC 
  16.       ,[contacttitle] ASC 
  17. )  
  18. WITH (STATISTICS_NORECOMPUTE  = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ONON [PRIMARY]  
  19. GO  
  20.  
  21. 将会弹出警告:警告! 最大键长度为 900 个字节。索引 'IX2_Customers' 的最大长度为 940 个字节。对于某些大值组合,插入/更新操作将失败。  
  22. 由于三个字段都是NVARCHAR字段类型,每个字符需要 2 个字节,(40+30+400)*2=940个字节,大于900字节,这时我们可以将[contactname] ,[contacttitle]包含在非键列中 

2.将大数据类型设为非键列

 

  1. CREATE NONCLUSTERED INDEX [IX3_Customers] ON [dbo].[Customers]   
  2. (  
  3.         
  4.        [companyname] ASC 
  5.         
  6. )  
  7. INCLUDE ( [contactname]  
  8.         ,[contacttitle])  
  9. WITH (STATISTICS_NORECOMPUTE  = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ONON [PRIMARY]  
  10. GO  
  11.  
  12. 这时索引键大小所占字符就只有40*2=80个字节,同时索引也是覆盖索引,索引的列包含查询用到的列,当我们查询数据时直接在索引页中查找数据就可以,不需要访问数据页,减少磁盘IO,提高性能 

 



本文地址 : //www.5vq5o.cn/plus/view-215077-1.html
标签: SQL Server 索引 体系结构 包含列
------分隔线----------------------------
最新评论 查看所有评论
发表评论 查看所有评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
验证码:

  • Valentino 2017秋冬高级定制大秀 2018-09-08
  • 中国经济充当了世界经济发展的火车头。但是,作为世界经济火车头的中国,在世界主要经济体股市都走牛的情况下,为何熊途漫漫?这种不正常的现象,背后是我们资本市场的投融 2018-07-14
  • 别空谈,说说看,这个“简单的逻辑关系”是什么关系? 2018-07-13
  • “讲课带着泥土味,我们都爱听” 2018-07-13
  • 习近平:绿水青山就是金山银山 2018-07-12
  • 端午思屈原,为什么《橘颂》是一篇伟大的作品 2018-07-11
  • 2018年焉耆县旅游美食文化推介会在库尔勒市举行 2018-07-10
  • 《中国气候变化蓝皮书》:年平均气温显著上升 2018-07-10
  • 24小时智能无人便利店落户唐山 2018-07-09
  • 理货员忙不过来 宁波球迷把啤酒销量喝成井喷状态 2018-07-09
  • 回复@寻找失落的真理:跟你的铁环玩去!咱真的没兴趣碾压你也。 2018-07-08
  • 易烊千玺押中高考作文题?不仅会押,今年还唱过! 2018-07-07
  • 【北京达世行世纪车型报价】北京达世行世纪4S店车型价格 2018-07-06
  • 欢迎访问《北京体育大学学报》编辑部网站 2018-07-05
  • 106| 186| 439| 301| 169| 998| 696| 348| 138| 328|