2019独角兽企业重金招聘Python工程师标准>>>

数据库表A有十万条记录,查询速度本来还可以,但导入一千条数据后,问题出现了。当选择的数据在原十万条记录之间时,速度还是挺快的;但当选择的数据在这一千条数据之间时,速度变得奇慢。

凭经验,这是索引碎片问题。检查索引碎片DBCC SHOWCONTIG(表),得到如下结果:

DBCC SHOWCONTIG 正在扫描 'A' 表...
表: 'A'(884198200);索引 ID: 1,数据库 ID: 13
已执行 TABLE 级别的扫描。
- 扫描页数.....................................: 3127
- 扫描扩展盘区数...............................: 403
- 扩展盘区开关数...............................: 1615
- 每个扩展盘区上的平均页数.....................: 7.8
- 扫描密度[最佳值:实际值]....................: 24.20%[391:1616]
- 逻辑扫描碎片.................................: 68.02%
- 扩展盘区扫描碎片.............................: 38.46%
- 每页上的平均可用字节数.......................: 2073.2
- 平均页密度(完整)...........................: 74.39%
DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。

由上我们看出,逻辑扫描碎片和扩展盘区扫描碎片都非常大,果真需要对索引碎片进行处理了。

一般有两种方法解决,一是利用DBCC INDEXDEFRAG整理索引碎片,二是利用DBCC DBREINDEX重建索引。二者各有优缺点。调用微软的原话如下:
DBCC INDEXDEFRAG 命令是联机操作,所以索引只有在该命令正在运行时才可用。而且可以在不丢失已完成工作的情况下中断该操作。这种方法的缺点是在重新组织数据方面没有聚集索引的除去/重新创建操作有效。

重新创建聚集索引将对数据进行重新组织,其结果是使数据页填满。填满程度可以使用 FILLFACTOR 选项进行配置。这种方法的缺点是索引在除去/重新创建周期内为脱机状态,并且操作属原子级。如果中断索引创建,则不会重新创建该索引。

也就是说,要想获得好的效果,还是得用重建索引,所以决定重建索引。
DBCC DBREINDEX(表,索引名,填充因子)
第一个参数,可以是表名,也可以是表ID。
第二个参数,如果是'',表示影响该表的所有索引。
第三个参数,填充因子,即索引页的数据填充程度。如果是100,表示每一个索引页都全部填满,此时select效率最高,但以后要插入索引时,就得移动后面的所有页,效率很低。如果是0,表示使用先前的填充因子值。

DBCC DBREINDEX(A,'',100)
重新测试查询速度,飞快。

转载于:https://my.oschina.net/sansom/blog/175038

提升SQL Server速度 整理索引碎片相关推荐

  1. 【译】索引进阶(十一):SQL SERVER中的索引碎片【上篇】

    原文链接:传送门. 第十章节我们分析了索引的内部结构.有了这些关于索引结构的知识,我们便可以分析索引碎片了:其产生的原因,如何防止,以及何时可以不去关注它们. 一些背景知识 / 复习 以下知识对于理解 ...

  2. dbcc dbreindex server sql_SQL Server2005索引碎片分析和解决方法

    摘要: SQL Server,为了反应数据的更新,需要维护表上的索引,因而这些索引会形成碎片.根据工作量的特征,这些碎片会影响对应的工作性能.此文帮助决定是否需要整理碎片以改善性能的信息.SQL Se ...

  3. 理解SQL SERVER中非聚集索引的覆盖,连接,交叉和过滤

    写在前面:这是第一篇T-SQL查询高级系列文章.但是T-SQL查询进阶系列还远远没有写完.这个主题放到高级我想是因为这个主题需要一些进阶的知识作为基础..如果文章中有错误的地方请不吝指正.本篇文章的内 ...

  4. SQL SERVER全面优化-------索引有多重要?

    想了好久索引的重要性应该怎么写?讲原理结构?我估计大部分人不愿意看,也不愿意花那么多时间仔细研究.光写应用?感觉不明白原理一样不会用.举例说明?情况太多也写不全....到底该怎么写呢? 随便写吧,想到 ...

  5. SQL Server 表和索引存储结构

    SQL Server 表和索引存储结构 杜飞 在上一篇文章中,我们介绍了SQL Server数据文件的页面类型,系统通过96个字节的头部信息和系统表从逻辑层面上将表的存储结构管理起来,具体到表的存储结 ...

  6. 翻译:SQL Server中的索引内部结构:到SQL Server索引级别10的阶梯。

    SQL Server中的索引内部结构:到SQL Server索引级别10的阶梯. 大卫•杜兰特2012/01/20 该系列 本文是楼梯系列的一部分:SQL Server索引的阶梯. 索引是数据库设计的 ...

  7. SQL Server中唯一索引和唯一约束之间的区别

    This article gives you an overview of Unique Constraints in SQL and also the Unique SQL Server index ...

  8. SQL Server基础之索引

     索引用于快速找出在某个列中有某一特定值的行,不使用索引,数据库必须从第一条记录开始读完整个表,直到找出相关的行.表越大,查询数据所花费的时间越多,如果表中查询的列有一个索引,数据库能快速到达一个位置 ...

  9. SQL Server 深入解析索引存储(上)

    SQL Server 深入解析索引存储(上) 原文:SQL Server 深入解析索引存储(上) 标签:SQL SERVER/MSSQL SERVER/数据库/DBA/索引体系结构/堆 概述 最近要分 ...

最新文章

  1. usb-to-isp-for-stm32
  2. bzoj 2756 [SCOI2012]奇怪的游戏 二分+网络流
  3. 关于Spring中IOC容器和AOP协同工作的原理理解
  4. win8计算机安全模式,WIN8如何设置按F8进入安全模式
  5. DAY13 Matlab实现图像镜像
  6. 消息队列面试 - 如何解决消息队列的延时以及过期失效问题?
  7. php学习之----采集新浪头条新闻
  8. 强化学习的数学基础2---PPO算法
  9. 程序设计基础II学习笔记
  10. 一文读懂JPEG算法!附C++代码实现JPEG算法,实现从BMP到JPEG转换!
  11. 网络出口究竟选择防火墙,还是路由器?
  12. 发票查验API给财务工作带来了哪些便利?
  13. npm 同时安装同一个包的不同版本(npm@6.9 alias)
  14. error: Apostrophe not preceded by \ (in XXX.)
  15. grep 命令使用(2)
  16. 2022年5月语音合成(TTS)和语音识别(ASR)论文月报
  17. 投影仪哪些比较好?投影仪如何选购
  18. 宽度优先搜索与深度优先搜索
  19. css百分比跟em的区别_查看CSS单位:像素,EM和百分比
  20. FM FFM:深入理解FM与FFM

热门文章

  1. 查看邮箱号是否存在_腾讯企业邮箱--新版本
  2. c语言数组的一维编程,C语言编程一维数组的使用.doc
  3. aws 服务器之间文件转发,如何实现AWS EFS在EC2之间共享文件系统?
  4. 佳能80d有人脸识别吗_2020单反/微单相机推荐,单反和微单(无反)选购攻略,佳能、尼康、索尼、富士、松下相机...
  5. for (var key in Obj)遍历JS对象/数组
  6. ssm框架逻辑删除mysql_ssm框架小总结——批量删除
  7. Java selenium 读取网页
  8. linux make项目管理器,Linux中makefile项目管理
  9. linux修改web密码忘记,Ubuntu 直接修改IPMIweb登录密码
  10. 【转载】煤层气大事记