MS SqlServer学习笔记(索引)
1.索引分类
MS SqlServer提供了两种索引:聚集索引和非聚集索引;
- 聚集索引是将数据按照索引的顺序存放
 - 非聚集索引是将索引和数据分离存放,通过指针将二者联系到一起。
 
因为两种索引对比:
- 使用聚集索引查询效率更高,但对表的更新效率影响较大,因此适用于更新读写比较大的表,例如商品详情(创建后很少改动,查看的频率却相对较高)
 - 使用非聚集索引则查询效率较低,对表的更新效率影响较小,适用于对查询需求不大打表,例如日志表
 
聚集索引注意点:
- 聚集索引在一个表中只能有一个,但是不限于一列,可以是包含多个列的组合索引
 - 虽然可以多列,但是列越少越好
 - 创建聚集索引的列的重复性越低越好,因为如果聚集索引不是唯一值,SQL SERVER会生成额外的标识信息以区分数据
 - 适合使用在返回一个返回值的场合:BETWEEN...AND , >= , <= , > , <
 - 适合返回大型结果集的查询
 - 适合被连续访问的列
 - 适合经常被连接及Group By的列
 - 最好使用窄列或窄列组合作为聚集索引列
 - 不适合频繁更改的列(由于表是按照索引排序的,索引的更新将导致数据整行移动
 
非聚集索引注意点:
- 非聚集索引可以看成是高效率查询数据的一种途径。例如对人群进行筛选可以从年龄,收入,性别等多种角度切入,每个角度都可以建立一个非聚集索引
 
创建聚集索引和非聚集索引的列是有要求的,以下类型无法创建索引:
- binary、varbinary
 - ntext、text、image
 - varchar(max)、nvarchar(max)
 - uniqueidentifier
 - rowversion、timestamp
 - sql_variant
 - 精度大于 18 位的 decimal 和 numeric
 - 标量大于 2 的 datetimeoffset
 - CLR 类型(hierarchyid和空间类型)
 - xml
 
如果使用以上类型的列,会出现错误【表'TABLE_NAME'中的列 'COLUMN_NAME' 的类型不能用作索引中的键列。】
使用索引的好处:能够根据查询要求,迅速缩小查询范围,避免全表扫描。
相关参考
MS SqlServer学习笔记(索引)的更多相关文章
- SQLServer 学习笔记之超详细基础SQL语句 Part 5
		
Sqlserver 学习笔记 by:授客 QQ:1033553122 -----------------------接Part 4------------------- 21使用默认 默认(也称默认值 ...
 - Bootstrap~学习笔记索引
		
回到占占推荐博客索引 bootstrap已经用了有段时间了,感觉在使用上还是比较容易接受的,在开发人员用起来上,也还好,不用考虑它的兼容性,手机,平台,PC都可以有效的兼容. bootstrap官方a ...
 - SQLServer学习笔记系列6
		
一.写在前面的话 时间是我们每个人都特别熟悉的,但是到底它是什么,用什么来衡量,可能很多人会愣在那里.时间可以见证一切,也可以消磨一切,那些过往的点点滴滴可思可忆.回想往年清明节过后,在家乡的晚上总能 ...
 - SQLServer学习笔记系列5
		
一.写在前面的话 转眼又是一年清明节,话说“清明时节雨纷纷”,武汉的天气伴随着这个清明节下了一场暴雨,整个城市如海一样,朋友圈渗透着清明节武汉看海的节奏.今年又没有回老家祭祖,但是心里依然是怀念着那些 ...
 - SQLServer学习笔记系列3
		
一.写在前面的话 今天又是双休啦!生活依然再继续,当你停下来的时候,或许会突然显得不自在.有时候,看到一种东西,你会发现原来在这个社会上,优秀的人很多,默默 吃苦努力奋斗的人也多!星期五早上按时上班, ...
 - SQLServer学习笔记系列2
		
一.写在前面的话 继上一次SQLServer学习笔记系列1http://www.cnblogs.com/liupeng61624/p/4354983.html以后,继续学习Sqlserver,一步一步 ...
 - SQLServer学习笔记<>相关子查询及复杂查询
		
二.查询缺少值的查询 在这里我们加入要查询2008年每一天的订单有多少?首先我们可以查询下订单表的订单日期在2008年的所有订单信息. 1 select distinct orderdate,coun ...
 - docker~学习笔记索引
		
回到占占推荐博客索引 使用docker也有段时间了,写了不少文章与总结,下面把它整理个目录出来,方便大家去学习与检索! docker~学习笔记索引 docker~linux下的部署和基本命令(2017 ...
 - SQLServer 学习笔记之超详细基础SQL语句 Part 12(The End)
		
Sqlserver 学习笔记 by:授客 QQ:1033553122 -----------------------接Part 11------------------- 现在,我们希望从 " ...
 
随机推荐
- Mysql学习笔记(九)索引查询优化
			
PS:上网再次看了一下数据库关于索引的一些细节...感觉自己学的东西有点少...又再次的啃了啃索引.... 学习内容: 索引查询优化... 上一章说道的索引还不是特别的详细,再补充一些具体的细节... ...
 - jquery选中下拉列表的某个值
			
$('#villageToiletAnn').val('xxx'); id是select的ID,不是option的ID
 - SQL Server 2016里TempDb的提升
			
几个星期前,SQL Server 2016的最新CTP版本已经发布了:CTP 2.4(目前已经是CTP 3.0).这个预览版相比以前的CTP包含了很多不同的提升.在这篇文章里我会谈下对于SQL Ser ...
 - 理解SQL Server的查询内存授予(译)
			
此文描述查询内存授予(query memory grant)在SQL Server上是如何工作的,适用于SQL 2005 到2008. 查询内存授予(下文缩写为QMG)是用于存储当数据进行排序和连接时 ...
 - MVC中在一个视图中,怎么加载另外一个视图?
			
在RazorView.cshtml视图: <!--在视图中调用无返回值的方法,视图中调用无返回值的方法,要加上大括号--> <!--在一个视图中,直接加载另外一个视图--> @ ...
 - 重构第29天 去除中间人对象(Remove Middle Man)
			
理解:本文中的”去除中间人对象”是指把 在中间关联而不起任何其他作用的类移除,让有关系的两个类直接进行交互. 详解:有些时候在我们的代码会存在一些”幽灵类“,设计模式大师Martin Fowler称它 ...
 - asp.net.mvc 中form表单提交控制器的2种方法和控制器接收页面提交数据的4种方法
			
MVC中表单form是怎样提交? 控制器Controller是怎样接收的? 1..cshtml 页面form提交 (1)普通方式的的提交
 - JavaScript常用代码
			
页面的按钮全选: function CheckBoxAll() { //得到页面上所有input表单元素:document.getElementsByTagName( ...
 - hadoop pipes wordcount compile
			
http://devel.cs.stolaf.edu/projects/bw/wiki.real/index.php/Hadoop_Reference,_January_2011 http://guo ...
 - DistributedCache小记
			
一.DistributedCache简介 DistributedCache是hadoop框架提供的一种机制,可以将job指定的文件,在job执行前,先行分发到task执行的机器上,并有相关机制对cac ...