注意:
索引重建前建议把数据库切换为完整模式,否则索引复制会在数据文件中进行,导致数据文件很大,而数据文件的收缩比日志文件的收缩要困难的多,且会对业务造成影响。

步骤一:
查询索引碎片,脚本如下,库比较大时执行时间会很长,虽然对数据库影响不大,依然建议在非高峰时段执行。(执行之前请先选定要查询碎片的数据库)
Declare @dbid int
Select @dbid=DB_ID()
SELECT DB_NAME(ps.database_id) AS [Database Name], OBJECT_NAME(ps.OBJECT_ID) AS [Object Name],
i.name AS [Index Name], ps.index_id, ps.index_type_desc, ps.avg_fragmentation_in_percent,
ps.fragment_count, ps.page_count, i.fill_factor, i.has_filter, i.filter_definition
FROM sys.dm_db_index_physical_stats(@dbid,NULL, NULL, NULL,null) AS ps
INNER JOIN sys.indexes AS i WITH (NOLOCK)
ON ps.[object_id] = i.[object_id]
AND ps.index_id = i.index_id
WHERE ps.database_id = DB_ID()
AND ps.index_type_desc <> 'HEAP'
AND ps.page_count > 2500
ORDER BY ps.avg_fragmentation_in_percent DESC OPTION (RECOMPILE);

步骤二:
筛选需要进行索引重建的表,举例如下:
一般来说,avg_fragmentation_in_percent大于60%就可以考虑重建了,因此本例中前10个索引都需要重建。其中index_id为1的表示是聚集索引(主键索引)。
步骤三:
!!!重要警告:操作前先备份全库,留后手永远是对自己和企业最大的负责。
索引重建的方式,我们一般采用在线重建的方式(SQL Server 2005之前的版本不支持),因此语句如下:
alter index index_name
on table_name
rebuild
with(online = on ,sort_in_tempDB = on , maxdop = 最大并行度);
go

在这里最大并行度应当选择操作系统CPU核数的80%为宜。
此外索引重建应当遵循以下原则:
  • 为避免空间使用过多,应当对索引进行依次重建,不建议使用alter index all on table_name...的语句。
  • 如果一个表有多个索引需要重建,则重建的顺序必须为:先重建聚集索引(即主键索引),再重建非聚集索引。
步骤四:
在在线重建索引的过程中,需要观察索引重建的进度,但是online索引重建的进度并不会在sys.dm_exec_requests中显示,因此微软提供了另一种查看完成进度的方式,具体如下:
在sql profiler的Progress Report中,可以监视Online Index Operation的情况。
其中BigintData1表示已经完成的在线重建记录数,BigData2表示当前线程的序列号,只要把所有进程的max(bigdata1)之和与和表的总行数比较一下就可以大致知道目前的进度了。
注意由于每个任务分配的行数并不均匀,所以估算的结果不是很精确,不过一般不会太离谱。

转载于:https://www.cnblogs.com/leohahah/p/7652410.html

SQL Server 索引重建手册相关推荐

  1. SQL Server 索引重建或索引重組

    查询索引的碎裂状态T-SQL语法(适用于SQL Server 2005以上): SELECT OBJECT_NAME(dt.object_id) ,si.name ,dt.avg_fragmentat ...

  2. Sql server索引优化

    Sql server索引优化 索引优化(1)堆上的非聚集索引 一.索引概述 1.概念 可以把索引理解为一种特殊的目录.就好比<新华字典>为了加快查找的速度,提供了几套目录,分别按拼音.偏旁 ...

  3. SQL Server索引设计 第五篇

    SQL Server索引的设计主要考虑因素如下: 检查WHERE条件和连接条件列: 使用窄索引: 检查列的选择性: 检查列的数据类型: 考虑列顺序: 考虑索引类型(聚集索引OR非聚集索引): 一.检查 ...

  4. 详细讲解SQL Server索引的性能问题

    在良好的数据库设计基础上,能有效地使用索引是SQL Server取得高性能的基础,SQL Server采用基于代价的优化模型,它对每一个提交的有关表的查询,决定是否使用索引或用哪一个索引.因为查询执行 ...

  5. [转]SQL Server 索引基础知识(2)----聚集索引,非聚集索引

    SQL Server 索引基础知识(2)----聚集索引,非聚集索引 [来自]http://blog.joycode.com/ghj/archive/2008/01/02/113291.aspx 由于 ...

  6. SQL Server 语句查询手册

    建表: CREATE TABLE  [DB.dbo].tableName (Stud_id int CONSTRAINT  constraintName1  not null primary key, ...

  7. SQL Server索引总结二

    从CREATE开始 通过显式的CREATE INDEX命令 在创建约束时作为隐含的对象 随约束创建的隐含索引 当向表中添加如下两种约束之一时,就会创建隐含索引. 主键约束(聚集索引) 唯一约束(唯一索 ...

  8. 索引sql server_维护SQL Server索引

    索引sql server In the previous articles of this series (see the full article TOC at bottom), we discus ...

  9. 探索SSMS中SQL Server索引属性

    This article gives you an insight into SQL Server Index properties in SSMS. 本文使您可以深入了解SSMS中SQL Serve ...

最新文章

  1. vue中slot(插槽)详解,slot、slot-scope和v-slot
  2. 【转】【centos】启动网卡报错(Failed to start LSB: Bring up/down networking )解决办法总结...
  3. 工业级光纤收发器产品性能特点介绍
  4. CF Gym100917 C
  5. 5. PHP APC APCu 安装使用
  6. 基于Ubuntu的ESP32平台搭建
  7. 人工智能白皮书(2022年) 附下载
  8. IOS UIImageView 汤姆猫实例
  9. 关于《学编程,还有必要上大学吗? 》
  10. 蜗牛—cocos2dx之初识
  11. webrtc 带宽估计
  12. 高博应诺培训班学习一个月总结
  13. Silverlight游戏设计(Game Design):(十五)如果还有梦(完)
  14. 整理的开学需要准备的物品清单,删了怪可惜,做个备份吧
  15. 在s5pv210开发板上移植官方2101310版本的uboot
  16. 公有云托管K8s服务百花齐放,企业如何统一纳管、便捷管理?
  17. python bs4 csv requests 爬虫 爬取携程火车票网址信息并保存
  18. 3D 建模软件哪家强?没有最好只有更合适,小白建议学习这3个
  19. 双碳”目标下资源环境中的可计算一般均衡(CGE)模型技术应用
  20. 小时候我常常纠结,北大和清华到底上哪个好?后来事实证明,我想的有点多……...

热门文章

  1. else 策略模式去掉if_如何用卫语句、策略模式、状态模式重构if-else语句
  2. unity webgl读写txt文件_python Files文件读写操作
  3. 反应速度测试软件,用批处理实现的反应速度测试工具
  4. lisp文字上标源码_创建文本/标注样式源码 - AutoLISP/Visual LISP 编程技术 - CAD论坛 - 明经CAD社区 - Powered by Discuz!...
  5. 【Android OpenGL ES 开发 (二)】渲染管线与Shader
  6. Python3实现红黑树[下篇]
  7. linux 远程权限不够,Eclipse连接远程Hadoop集群开发时权限不足问题解决方案
  8. java隐藏与覆盖_java中方法的隐藏和覆盖问题?
  9. pb 执行存储过程带参数_PB级海量数据服务平台架构设计实践
  10. mysql忽略数据类型_MYSQL 常用数据类型