原文:sql server 索引阐述系列五 索引参数与碎片

-- 创建聚集索引
create table [dbo].[pub_stocktest] add  constraint [pk_pub_stocktest] primary key clustered
(
[sid] asc
)with (pad_index = off, statistics_norecompute = off, sort_in_tempdb = off, ignore_dup_key = off, online = off, allow_row_locks = on, allow_page_locks = on) on [primary]-- 创建非聚集索引create nonclustered index [ix_model] on [dbo].[pub_stocktest]
([model] asc
)
include (     [name]) with (pad_index = off, statistics_norecompute = off, sort_in_tempdb = off, drop_existing = off, online = off, allow_row_locks = on, allow_page_locks = on, FILLFACTOR = 85) on [primary]

1.1 Filefactor参数

  使用Filefactor可以对索引的每个叶子分页存储保留一些空间。对于聚集索引,叶级别包含了数据,使用Filefactor来控制表的保留空间,通过预留的空间,避免了新的数据按顺序插入时,需腾出空位而进行分页分隔。
  Filefactor设置生效注意,只有在创建索引时才会根据已经存在的数据决定预留的空间大小,如里需要可以alter index重建索引并重置原来指定的Filefactor值。
  在创建索引时,如果不指定Filefactor,就采用默认值0 也就是填充满,可通过sp_configure 来配置全局实例。Filefactor也只就用于叶子级分页上。如果要在中间层控制索引分页,可以通过指定pad_index选项来实现.该选择会通知到索引上所有层次使用相同的Filefactor。Pad_index也只有索引在新建或重建时有用。

1.2 Drop_existing 参数

  删除或重建一个指定的索引作为单个事务来处理。该项在重建聚集索引时格外有用,当删除一个聚集索引时,sqlserver会重建每个非聚集索引以便将书签从聚集索引键改为RID。如果再新建或者重建聚集索引,Sql server会再一次重建全部的非聚集索引,如果再新建或重建的聚集索引键值相同,可以设置Drop_existing=ON。

1.3 IGNORE_DUP_KEY

  是指如果一个update或者insert语句影响多行数据,但有一行键被发现产生重值时,整个语句就会回滚,IGNORE_DUP_KEY=on时产生重复键值时不会引起整个语句的回滚,重复的行会被舍弃其它的行会被插入或更新。

1.4 Statistics_norecompute

  选项决定了是否需要自动更新索引上的统计,每个索引维护着该索引首位字段的数值分布的柱状图,在查询执行计划时,查询优化器利用这些统计信息来判断一个特定索引的有效性。当数据达到一个阀值时,统计值会变。Statistics_norecompute选项允许一个关联的索引在数据修改时不自动更新统计值。该选择覆盖了auto_update_statistics的on值。

1.5 ONLINE   

  值默认OFF, 索引操作期间,基础表和关联的索引是否可用于查询和数据修改操作。
  当值为ON时,能够继续对基础表和索引进行查询或更新,但在短时间内获取sch_m架构修改锁,必须等待此表上的所有阻塞事务完成,在操作期间,此锁会阻止所有其它事务。
  当值为OFF时,可以会获取共享锁,防止更新基础表,但允许读操作

1.6 MAXDOP

  索引操作期间替代max degree of parallelism 实例配置,默认值为0, 根据当前系统工作负荷使用实际数量的处理器。

1.7 包含性列(included columns)
  包含列只在叶级别中出现,不控制索引行的顺序,它作用是使叶级别包含更多信息从而覆盖索引的调优能力,覆盖索引只出现在非聚集索引中,在叶级别就可以找到满足查询的全部信息。

1.8 on [primary]

  在创建索引时 create index 最后一个子句允许用户指定索引被放置在哪里。可以指定特定的文件组或预定义的分区方案。默认存放与表文件组相同一般都是主文件组中。

1.9约束和索引

    当我们创建主键或者唯一性约束时,会创建一个唯一性索引,被创建出来支持约束的索引名称与约束名称相同。
  约束是一个逻辑概念,而索引是一个物理概念,建立索引实际是创建一个占用存储空间并且在数据修改操作中必须得到维护的物理结构。
  创建约束就索引内部结构或优化器的选择来看是没有区别的。

二 索引碎片  

  2.1 SHOWCONTIG 

--   SQLserver 2000使用SHOWCONTIG查看索引碎片 (已过时)
dbcc SHOWCONTIG (tablename,'indexname') 

  例如下面查询一个PUB_StockCollect表下的IX_StockModel索引

  (1)Page Scanned-扫描页数:如果你知道行的近似尺寸和表或索引里的行数,那么你可以估计出索引里的页数。看看扫描页数,如果明显比你估计的页数要高,说明存在内部碎片。

  (2)Extents Scanned-扫描扩展盘区数:用扫描页数除以8,四舍五入到下一个最高值。该值应该和DBCC SHOWCONTIG返回的扫描扩展盘区数一致。如果DBCC SHOWCONTIG返回的数高,说明存在外部碎片。碎片的严重程度依赖于刚才显示的值比估计值高多少。

  (3)Extent Switches-扩展盘区开关数:该数应该等于扫描扩展盘区数减1。高了则说明有外部碎片。

  (4)Avg. Pages per Extent-每个扩展盘区上的平均页数:该数是扫描页数除以扫描扩展盘区数,一般是8。小于8说明有外部碎片。

  (5)Scan Density [Best Count:Actual Count]-扫描密度[最佳值:实际值]:DBCC SHOWCONTIG返回最有用的一个百分比。这是扩展盘区的最佳值和实际值的比率。该百分比应该尽可能靠近100%。低了则说明有外部碎片。

  (6)Logical Scan Fragmentation-逻辑扫描碎片:无序页的百分比。该百分比应该在0%到10%之间,高了则说明有外部碎片。

  (7)Extent Scan Fragmentation-扩展盘区扫描碎片:无序扩展盘区在扫描索引叶级页中所占的百分比。该百分比应该是0%,高了则说明有外部碎片。

  (8)Avg. Bytes Free per Page-每页上的平均可用字节数:所扫描的页上的平均可用字节数。越高说明有内部碎片,不过在你用这个数字决定是否有内部碎片之前,应该考虑fill factor(填充因子)。

  (9)Avg. Page Density (full)-平均页密度(完整):每页上的平均可用字节数的百分比的相反数。低的百分比说明有内部碎片。

  总结:(1)逻辑扫描碎片:越低越好 (2)平均页密度:80%左右最好,低于%60重建索引,(3)最佳计数与实际计数相差较大重建索引。

sql server 索引阐述系列五 索引参数与碎片相关推荐

  1. sql server 索引阐述系列二 索引存储结构

    "流光容易把人抛,红了樱桃,绿了芭蕉" 转眼又年中了,感叹生命的有限,知识的无限.在后续讨论索引之前,先来了解下索引和表数据的内部结构,这一节将介绍页的存储,页分配单元类型,区的存 ...

  2. SQL Server调优系列玩转篇三(利用索引提示(Hint)引导语句最大优化运行)

    SQL Server调优系列玩转篇三(利用索引提示(Hint)引导语句最大优化运行) 原文:SQL Server调优系列玩转篇三(利用索引提示(Hint)引导语句最大优化运行) 前言 本篇继续玩转模块 ...

  3. SQL Server调优系列进阶篇(如何维护数据库索引)

    前言 上一篇我们研究了如何利用索引在数据库里面调优,简要的介绍了索引的原理,更重要的分析了如何选择索引以及索引的利弊项,有兴趣的可以点击查看. 本篇延续上一篇的内容,继续分析索引这块,侧重索引项的日常 ...

  4. Sql Server查询性能优化之索引篇【推荐】

    Sql Server查询性能优化之索引篇[推荐] 这篇是索引系列中比较完整的,经过整理而来的 一 索引基础知识 索引概述 1.概念 可以把索引理解为一种特殊的目录.就好比<新华字典>为了加 ...

  5. SQL Server 查询性能优化——覆盖索引(二)

    在SQL Server 查询性能优化--覆盖索引(一)  中讲了覆盖索引的一些理论. 本文将具体讲一下使用不同索引对查询性能的影响. 下面通过实例,来查看不同的索引结构,如聚集索引.非聚集索引.组合索 ...

  6. oracle的优化适用于mysql吗_性能优化之数据库优化,适用于Sqlite、Mysql、Oracle、Sql server,详细介绍了索引和事务及部分针对Sqlite的优化...

    本文为性能优化的第一篇--数据库性能优化,原理适用于大部分数据库包括Sqlite.Mysql.Oracle.Sql server,详细介绍了索引(优缺点.分类.场景.规则)和事务,最后介绍了部分单独针 ...

  7. SQL索引管理器——用于SQL Server和Azure上的索引维护的免费G​​UI工具

    目录 介绍 主意 实现 结果和计划 下载源 - 16.3 MB 下载 SQL 索引管理器 v1.0.0.68.zip - 16.2 MB 下载 SQL 索引管理器 v1.0.0.67.zip - 16 ...

  8. SQL索引管理器——用于SQL Server和Azure上的索引维护的免费GUI工具

    目录 介绍 理念 实现 结果和计划 介绍 我作为SQL Server DBA工作了8年多,管理和优化服务器的性能.在我的空闲时间,我想为世界和我的同事做一些有用的事情.这就是我们最终为SQL Serv ...

  9. SQL Server中的列存储索引

    先决条件 (Prerequisite ) 通过理论和实践措施可以更好地解释与SQL Server 2012列存储索引有关的讨论. 因此,对于实际测量部分–我将使用AdventureWorksDW201 ...

最新文章

  1. 安卓上比较好的python开发软件-手机随时随地写Python,还可以开发安卓APP,太厉害了!...
  2. python零基础有用吗-10天搞定Python,告诉你有什么用?
  3. 10组第一次作业-现代软件工程2017成员介绍
  4. 洛谷 - P1989 无向图三元环计数(思维建图)
  5. mysql如何复制表结构,包括主键,索引等等
  6. object overview page打开后白屏问题分析
  7. centos7下安装低版本mysql_centos7下使用yum安装制定版本mysql
  8. 51 nod 1127最短的包含字符串(尺取法)
  9. 成功人士都是这样逼出来的
  10. 乌班图linux怎么连手机热点,使用Ubuntu12.04创建无线WiFi热点供手机上网
  11. 58 - 算法 -分治问题 - 循环 二分查找 OpenJudge 百练 4143和为给定数
  12. 机器学习--支持向量机实战(二)简易SMO算法实现
  13. Excel—身份证生日提取
  14. selenium + python环境搭建步骤
  15. 【数学模型】TOPSIS
  16. Ubuntu系统安装Ghostscript
  17. 计算机毕业设计Android手机微博系统客户端app(源码+系统+mysql数据库+Lw文档)
  18. 定积分(黎曼和)的编程实现(java和python实现)
  19. win10 无法拨号上网720错误
  20. 世界七大数学难题——千年大奖问题(转载)

热门文章

  1. 求两直线交点程序 C
  2. VB打开文本文件各种方法
  3. List列表拒绝添加重复信息
  4. 如何在Kaggle比赛上击败98%的对手?你需要一份七步秘笈
  5. TensorFlow 1.11.0正式版发布了,强力支持Keras
  6. 1亿中国人已被AI批改过作业
  7. 亚马逊发布新版MXNet:支持英伟达Volta和稀疏张量
  8. 菜鸟网工工作中对Linux系统的一点体会
  9. Shell脚本批量清除Nginx缓存
  10. [20170816]Join Elimination Bug.txt