SQL点点滴滴_聚集索引设计指南-转载
聚集索引基于数据行的键值在表内排序和存储这些数据行, 每个表只能有一个聚集索引, 因为数据行本身只能按一个顺序存储. 有关聚集索引体系结构的详细信息, 请参阅 聚集索引结构.
每个表几乎都对列定义聚集索引来实现下列功能:
可用于经常使用的查询.
- 提供高度唯一性. 创建 PRIMARY KEY 约束时, 将在列上自动创建唯一索引. 默认情况下, 此索引是聚集索引, 但是在创建约束时,可以指定创建非聚集索引.
可用于范围查询.
如果未使用 UNIQUE 属性创建聚集索引, 数据库引擎将向表自动添加一个 4 字节的 uniqueifier 列. 必要时, 数据库引擎将向行自动添加一个 uniqueifier 值以使每个键唯一, 此列和列值供内部使用, 用户不能查看或访问.
查询注意事项
在创建聚集索引之前, 应先了解数据是如何被访问的. 考虑对具有以下特点的查询使用聚集索引:
使用运算符(如 BETWEEN、>、>=、< 和 <=)返回一系列值.
使用聚集索引找到包含第一个值的行后,便可以确保包含后续索引值的行物理相邻. 例如, 如果某个查询在一系列销售订单号间检索记录, SalesOrderNumber 列的聚集索引可快速定位包含起始销售订单号的行, 然后检索表中所有连续的行, 直到检索到最后的销售订单号.
返回大型结果集.
使用 JOIN 子句; 一般情况下, 使用该子句的是外键列.
- 使用 ORDER BY 或 GROUP BY 子句, 在 ORDER BY 或 GROUP BY 子句中指定的列的索引, 可以使数据库引擎不必对数据进行排序,因为这些行已经排序, 这样可以提高查询性能.
列注意事项
一般情况下, 定义聚集索引键时使用的列越少越好, 考虑具有下列一个或多个属性的列:
唯一或包含许多不重复的值
例如, 雇员 ID 唯一地标识雇员. EmployeeID 列的聚集索引或 PRIMARY KEY 约束将改善基于雇员 ID 号搜索雇员信息的查询的性能. 另外, 可对LastName、FirstName、MiddleName 列创建聚集索引, 因为经常以这种方式分组和查询雇员记录, 而且这些列的组合还可提供高区分度.
按顺序被访问
例如, 产品 ID 唯一地标识 AdventureWorks2008R2 数据库的 Production.Product 表中的产品. 在其中指定顺序搜索的查询(如 WHERE ProductID BETWEEN 980 and 999)将从 ProductID 的聚集索引受益, 这是因为行将按该键列的排序顺序存储.
由于保证了列在表中是唯一的, 所以定义为 IDENTITY.
经常用于对表中检索到的数据进行排序.
按该列对表进行聚集(即物理排序)是一个好方法, 它可以在每次查询该列时节省排序操作的成本.
聚集索引不适用于具有下列属性的列:
频繁更改的列
这将导致整行移动, 因为数据库引擎必须按物理顺序保留行中的数据值. 这一点要特别注意, 因为在大容量事务处理系统中数据通常是可变的.
- 宽键 宽键是若干列或若干大型列的组合. 所有非聚集索引将聚集索引中的键值用作查找键, 为同一表定义的任何非聚集索引都将增大许多, 这是因为非聚集索引项包含聚集键, 同时也包含为此非聚集索引定义的键列.
设置索引选项
创建聚集索引时, 可指定若干索引选项, 因为聚集索引通常都很大, 所以应特别注意下列选项:
SORT_IN_TEMPDB
DROP_EXISTING
FILLFACTOR
ONLINE
有关详细信息,请参阅 设置索引选项.
SQL点点滴滴_聚集索引设计指南-转载的更多相关文章
- SQL点点滴滴_唯一索引设计指南-转载
唯一索引能够保证索引键中不包含重复的值, 从而使表中的每一行从某种方式上具有唯一性, 只有当唯一性是数据本身的特征时, 指定唯一索引才有意义. 例如, 如果您希望确保 HumanResources.E ...
- SQL点点滴滴_非聚集索引设计指南-转载
非聚集索引包含索引键值和指向表数据存储位置的行定位器. 有关非聚集索引体系结构的详细信息, 请参阅 非聚集索引结构. 可以对表或索引视图创建多个非聚集索引. 通常, 设计非聚集索引是为改善经常使用的没 ...
- SQL查询优化:详解SQL Server非聚集索引(转载)
本文是转载,原文地址 http://tech.it168.com/a2011/1228/1295/000001295176.shtml 在SQL SERVER中,非聚集索引其实可以看作是一个含有聚集索 ...
- 探究SQL添加非聚集索引,性能提高几十倍之谜
上周,技术支持反映:客户的一个查询操作需要耗时6.1min左右,在跟进代码后,简化了数据库的查询后仍然收效甚微.后来,技术总监分析了sql后,给其中的一个表添加的一个非聚集索引(三个字段)后,同样的查 ...
- T-SQL查询高级--理解SQL SERVER中非聚集索引的覆盖,连接,交叉和过滤
写在前面:这是第一篇T-SQL查询高级系列文章.但是T-SQL查询进阶系列还远远没有写完.这个主题放到高级我想是因为这个主题需要一些进阶的知识作为基础..如果文章中有错误的地方请不吝指正.本篇文章 ...
- SQL点点滴滴_查询类型和索引-转载
当您考虑是否要对列创建索引时, 请估计在查询中使用列的方式, 下表介绍了索引对其有用的查询类型. 表中的示例基于 AdventureWorks2008R2 示例数据库, 在 SQL Server Ma ...
- 但从谈论性能点SQL Server选择聚集索引键
简单介绍 在SQL Server中,数据是按页进行存放的.而为表加上聚集索引后,SQL Server对于数据的查找就是依照聚集索引的列作为keyword进行了. 因此对于聚集索引的选择对性能的影响就变 ...
- SQL Server的聚集索引和非聚集索引
微软的SQL SERVER提供了两种索引:聚集索引(clustered index,也称聚类索引.簇集索引)和非聚集索引(nonclustered index,也称非聚类索引.非簇集索引)…… (一) ...
- SQL Server-聚焦聚集索引对非聚集索引的影响(四)
前言 在学习SQL 2012基础教程过程中会时不时穿插其他内容来进行讲解,相信看过SQL Server 2012 T-SQL基础教程的童鞋知道前面写的所有内容并非都是摘抄书上内容,如若是这样那将没有任 ...
随机推荐
- 原子操作类AtomicInteger详解
为什么需要AtomicInteger原子操作类?对于Java中的运算操作,例如自增或自减,若没有进行额外的同步操作,在多线程环境下就是线程不安全的.num++解析为num=num+1,明显,这个操作不 ...
- 在ionic3自定义组件中使用官方组件
先创建组件: ionic g component xxx 在components里面如下图引入
- Android开发环境搭建步骤-【Android】
本教程是android开发环境在windows下的安装配置,经本人测试完全正确无误.这个教程是史上最详细的android开发环境搭建教程. 工具/原料 Eclipse 3.7.0.Java Jdk6. ...
- springboot项目更改代码后实时刷新问题
在spring boot使用的过程中, 发现我修改了静态文件, 前台刷新后, 没有任何变化, 必须重新启动, 才能看到, 这简直不能让人接受. 那有什么方法来解决这个问题呢. Baidu之后, 得到了 ...
- Linux 信号signal处理函数--转
alarm(设置信号传送闹钟)相关函数 signal,sleep 表头文件 #include<unistd.h> 定义函数 unsigned int alarm(unsigned int ...
- Windows加密API的功能分类
本地数据加密保护本地数据加密保护机制提供了简单的DAPI调用接口,密钥管理等等一概由系统来处理.DAPI的数据加密保护机制在用户登录会话范围或者本地计算范围,使用操作系统设计的方式加密保护数据和解密还 ...
- Ajax嵌套Ajax的模版
引入 在开发中,难免会碰到需要发送两次ajax请求或者更多的情况 情境:我们需要resultB数据,后台提供的接口要先传入参数paramA,获取到resultA,然后resultA作为参数,调用另外一 ...
- js运动缓动效果
http://www.cnblogs.com/hongru/archive/2012/03/16/2394332.html 转分享地址
- 关于webApi使用session
1.关于webApi使用session 在Global.asax中注册session添加以下代码 public override void Init() { //开启session this.Post ...
- Ubuntu 16.04 开启BBR加速
BBR(Bottleneck Bandwidth and RTT)是Google推出的一个提高网络利用率的算法,可以对网络进行加速,用来干什么大家心里都有B数 Ubuntu开启BBR的前提是内核版本必 ...