SQL Server 索引知识-应用,维护
创建聚集索引
a索引键最好唯一(如果不唯一会隐形建立uniquier列(4字节)确保唯一,也就是这列都会复制到所有非聚集索引中)
b聚集索引列所占空间应尽量小(否则也会使非聚集索引的空间变大)
c聚集索引应固定,不能随便改动(否则会引起分页,碎片,非聚集索引被迫修改等一些列问题)
d聚集索引键一般与主键(primary key)分开(基于方便业务调整,如业务逻辑存储数据与clustered index key一致且不会改变,则主键可为聚集索引)
应用实例:
选择聚集键时,尽量避免因插入引起的分页
单单时间列不是一个好的聚集索引,因为不唯一,但可以组合例如(date+int)
索引时(16byte)要用 NEWSEQUENTIALID() 而不用NEWID(),因为newid()随机,会引起碎片分页等
创建非聚集索引
创建索引选项:
FILLFACTOR ---填充因子,保留页空间比率(避免分页,根据索引项特性设定,如果不可避免分裂,建议设定高比率值)
PAD_INDEX---与FILLFACTOR连接使用,保留中间节点可用空间
GNORE_DUP_KEY---在有UNIQUE(聚集/非聚集)约束时舍弃重复键值而不回滚整个语句
DROP_EXISTING --重建聚集索引时避免聚集索引二次重建(非聚集索引线上环境应使用创建新索引后删除现有索引方式,使索引维护影响最小化)
SORT_IN_TEMPDB---创建(重建)索引使用SORT_IN_TEMPDB选项,在TEMPDB中对键值排序减少源数据库需求空间,如果tempdb和所有操作的数据库在不同磁盘上,则性能会有提高
STATISTICS_NORECOMPUTE---是否自动更新索引上的统计信息
MAXDOP ---控制新建索引能够使用的最大处理器数量(数据过于倾斜会造成CPU资源浪费,创建时瓶颈一般出现在磁盘.千万级数据MAXDOP建议4)
ONLINE---是否在线创建索引(进行索引维护时,为使影响最低,一般设置为ON)
On filegroup ---为索引存储选择文件组.(根据索引类型,维护计划类型指定.)
ASC/DESC ---索引排序规则
索引视图
检查
SELECT OBJECTPROPERTY (OBJECT_ID ('Product_Totals'), 'IsIndexable');---查看视图是否可以建立索引
SELECT OBJECTPROPERTY (OBJECT_ID ('Vdiscount1'), 'IsIndexed');----查看视图是否创建了索引
条件
ANSI_NULLS 和 QUOTED_IDENTIFIER 选项必须设置为 ON
必须使用 SCHEMABINDING
视图不能引用任何其他视图,只能引用基表
视图引用的所有基表必须与视图位于同一数据库中,并且所有者也与视图相同
视图中的表达式引用的所有函数必须是确定的(计算列,可使用IsDeterministic确认)
注意:
索引视图上必须首先创建唯一聚集索引
即使创建了索引视图,查询时优化器也不一定使用索引视图的索引,可能直接有索引定义中表的索引
建议:索引视图会使源表在DML时扩大锁的规模,造成潜在的阻塞甚至死锁问题.在频繁更新的业务中不建议使用.
索引最佳实践
选好聚集索引,最好创建表时就指定(巨大数据量的堆表变为聚集表时成本非常高)
非聚集索引选择,高选择性列(索引密度),频繁访问谓词中选择创建.
复合非聚集索引首列应高选择.
注意复合索引键列排序规则(根据实际业务逻辑)
用好索引包含性列(覆盖查询避免可能的随机IO)
非聚集索引数量考量(平衡查询与DML操作消耗)
过滤索引使用(特殊数据结构下使用.如数据中大量Null值等)
非聚集索引包含性列中显示添加聚集索引(不会消耗额外空间,如果使用非聚集索引时包括聚集谓词,可避免键查找)
用好缺失索引相关视图sys.dm_db_missing_index_XX(需定位到具体查询具体分析,系统规模性调优时酌情设定规则批量创建)
索引维护.
创建索引.
创建前检查运行环境是否适合创建(低负载,是否有长时间占用相应锁资源导致阻塞创建进程)
线上环境应在线创建
替换/调整索引时采用创建,删除步骤
根据特定场景确认是否需重建,重新组织索引(碎片影响区域扫描,预读.重新组织索引对预读无帮助. sys.dm_db_index_physical_stats检索索引碎片)
删除索引.
根据DMV(sys.dm_db_index_usage_stats等)制定相应规则判断索引是否无用.(规则顺序:是否无用索引,是否重复索引,是否合理索引,是否可合并索引)
标记无用索引应先禁用一段时间.(完全确认情况可以立刻删除)
删除前确认是否有长时间占用相应锁资源导致阻塞删除进程.
SQL Server 索引知识-应用,维护的更多相关文章
- SQL Server 索引知识-概念
概念篇 索引概念(index concept) 一种表或视图中相关的B-tree的数据结构.索引键列由一列或多列组成.可拥有包含性列(sql2005).用于提升Sql Server 查找相关数据行效率 ...
- SQL Server 索引的自动维护 <第十三篇>
在有大量事务的数据库中,表和索引随着时间的推移而碎片化.因此,为了增进性能,应该定期检查表和索引的碎片,并对具有大量碎片的进行整理. 1.确定当前数据库中所有需要分析碎片的表. 2.确定所有表和索引的 ...
- SQL Server 索引自动组织维护
公司的一个产品中的数据库,几个热点表因为主键和索引设计不合理,造成索引碎片过大,影响性能. 我尝试新建了一个索引碎片整理的定时任务,用于维护索引锁片和统计信息. 具体的过程如下: 本文原创,转发请表明 ...
- SQL Server 索引知识-结构,实现
索引的作用毋庸置疑,但他是如何组织,并实现提高语句访问效率的呢?本篇文章为大家做个详细的介绍. 聚集索引架构 B-tree 如图1-1 a.B-tree的结构,叶子节点为数据.数据按照聚集索引键有序排 ...
- 转: SQL Server索引的维护 - 索引碎片、填充因子
转:http://www.cnblogs.com/kissdodog/archive/2013/06/14/3135412.html 实际上,索引的维护主要包括以下两个方面: 页拆分 碎片 这两个问题 ...
- SQL Server索引的维护 - 索引碎片、填充因子 <第三篇>
实际上,索引的维护主要包括以下两个方面: 页拆分 碎片 这两个问题都和页密度有关,虽然两者的表现形式在本质上有所区别,但是故障排除工具是一样的,因为处理是相同的. 对于非常小的表(比64KB小得多), ...
- SQL Server 索引维护(1)——系统常见的索引问题
前言: 在很多系统中,比如本人目前管理的数据库,索引经常被滥用,甚至使用DTA(数据库引擎优化顾问)来成批创建索引(DTA目前个人认为它的真正用处应该是在发现缺失的统计信息,在以前的项目中,用过一次D ...
- SQL Server 索引维护:系统常见的索引问题
在很多系统中,比如本人目前管理的数据库,索引经常被滥用,甚至使用DTA(数据库引擎优化顾问)来成批创建索引(DTA目前个人认为它的真正用处应该是在发现缺失的统计信息,在以前的项目中,用过一次DTA,里 ...
- 关于SQL Server索引密度的知识
文章主要描述的是SQL Server索引密度(Index Densities),当一个查询的SARG 的值直到查询运行时才得以知晓,或是SARG是一个关于索引的多列时,SQL Server才使用为索引 ...
随机推荐
- 正则中str.match(pattern)与pattern.exec(str)的区别
这两个函数除了调用对象以及参数不同之外,<javascript高级程序设计>中对exec描述比较详细,对match只是说返回数组跟exec一样.书中并没有说只说了正则在非全局模式下的情况, ...
- Elasticsearch入门(一)
索引(index) -- 存储关联数据的地方.实际上,索引只是一个逻辑命名空间(logical namespace),它指向一个或多个分片(shards). 分片(shard) 是 工作单元(work ...
- elasticsearch(四) 之 elasticsearch常用的一些集群命令
目录 elasticsearch常用的一些集群命令 查看集群健康状态 查看集群的节点列表 查看所有的索引 删除索引 查询索引的某个文档内容 更新文档 删除文档 自动创建索引 定时删除索引 elasti ...
- dephi(pascal)中修改Label字体的样式(加粗,斜体,下划线)
不废话,直接代码: Label1.Font.style:=[fsBold,fsItalic,fsUnderline]; //加粗.斜体,下划线
- synchronized修饰方法和对象的区别
使用synchronized(object) { 代码块.... } 能对代码块进行加锁,不允许其他线程访问,其的作用原理是:在object内有一个变量,当有线程进入时,判断是否为0,如果为0,表示可 ...
- javaScript中用eval()方法转换json对象
var u = eval('('+user+')'); 1.对于服务器返回的JSON字符串,如果jQuery异步请求没做类型说明,或者以字符串方式接受,那么需要做一次对象化处理,方式不是太麻烦,就是将 ...
- WebApi使用swagger ui自动生成接口文档
之前就写到.最近正在使用webapi.这里介绍一个实用的东西swageer ui现在开发都是前后端分开.我们这里是给前端提供api.有时候对于一个api的描述,并不想专门写一份文档.很浪费时间.swa ...
- 阿里云搭建hadoop集群服务器,内网、外网访问问题(详解。。。)
这个问题花费了我将近两天的时间,经过多次试错和尝试,现在想分享给大家来解决此问题避免大家入坑,以前都是在局域网上搭建的hadoop集群,并且是局域网访问的,没遇见此问题. 因为阿里云上搭建的hadoo ...
- 【基于初学者的SSH】struts2 值栈的详解与struts2标签库+ognl表达式
一:什么是值栈:struts2里面本身提供的一种存储机制,类似于域对象,值栈,可以存值和取值 特点:先进后出,最上面的元素叫做栈顶,也叫压栈. <s:debug></s:debug& ...
- npm saveError ENOENT: no such file or directory
1.报错情况 在执行npm install xxx时,出现如下:npm WARN saveError ENOENT: no such file or directory, open '/nodetes ...