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基础教程的童鞋知道前面写的所有内容并非都是摘抄书上内容,如若是这样那将没有任 ...
随机推荐
- element-ui日期组件DatePicker选择日期范围赋值编辑问题
最近在项目中使用element-UI的日期范围组件时遇到一个问题,相信很多人也做过这种场景,一个录入页面也同时是编辑页面,编辑的时候就需要先赋值.但是我给date组件赋值后,确无法操作了,change ...
- thinkPhP + Apache + PHPstorm整合框架
最近在学习使用 ThinkPhP,网上很多都是用一些整合好的服务框架,为了学习,在这里我简单的对Apache.PHP做一个原生的整合,希望对你有帮助. 步骤: ①下载 thinkPHP.PHP.Apa ...
- AngularJs学习笔记--Managing Service Dependencies
原版地址:http://docs.angularjs.org/guide/dev_guide.services.managing_dependencies angular允许service将其他ser ...
- Java学习之路(二):Java中的方法
Java中的方法 概念: 为什么要有方法: 提高代码的复用性 什么是方法: 完成特定功能的代码块 格式: 修饰符 返回值类型 方法名(参数){ 方法体语句: return 返回值: } 1.修饰符:例 ...
- 怎么用代码弹回 UITableView 中左滑出来的删除按钮
点击取消,让删除按钮弹回去 [tableView setEditing:NO] 初学 ios 真是大菜鸟,这么简单的一个问题搞了 3 个小时
- 常用linux网络工具
iftop netstat nethogs可以查看进程占用网络的情况 nc -u -z -w2 192.168.0.1 1-1000 //扫描192.168.0.3 的端口 范围是 1-1000
- 案例17-validate自定义校验规则校验验证码是否输入正确
1 自定义校验规则代码 <script type="text/javascript"> //使用validate插件进行表单的校验 $(function(){ $(&q ...
- SpringMVC入门(二)
使用注解的方式进行Handler的开发 注意:此处只介绍和方式一不同的地方 1.注解的处理器适配器 在spring3.1之前使用org.springframework.web.servlet.m ...
- ImportError: cannot import name wordnet
ubuntu安装好nltk,调用时,出现问题: 解决: Install Setuptools: http://pypi.python.org/pypi/setuptools Install Pip: ...
- POj2387——Til the Cows Come Home——————【最短路】
A - Til the Cows Come Home Time Limit:1000MS Memory Limit:65536KB 64bit IO Format:%I64d & ...