MSSQL 重建索引(在线重建、控制最大处理器数 、MAXDOP )

一、什么情况下需要重建索引

1、碎片过多(参考值:>20%)

索引碎片如何产生,请移步至《 T-SQL查询高级—SQL Server索引中的碎片和填充因子》

2、填充度过低(参考值:<75%)

导致填充度过低的可能原因:①.有删除 ②.有分区表 ③.聚集索引不是数字 ④.数据百万以内,比较少

二、重建索引

ALTER INDEX <name of index> ON <table or view name> REBUILD WITH (ONLINE = ON,MAXDOP = 4)

ONLINE:在线执行,减少重建过程中的锁 (执行时间延长)

MAXDOP :手动配置用于运行索引语句的最大处理器数

说明
0
指定服务器根据当前系统工作负荷确定所使用的 CPU 数目。这是默认值,还是推荐设置。

1
取消生成并行计划。操作将以串行方式执行。


2-64


将处理器的数量限制为指定的值。根据当前工作负荷,可能使用较少的处理器。如果指定的值大于可用的 CPU 数量,将使用实际可用的 CPU 数量。


三、扩展笔记:

对于碎片的解决办法 (引用自:宋沄剑 SQL Server索引中的碎片和填充因子

基本上所有解决办法都是基于对索引的重建和整理,只是方式不同

1.删除索引并重建

这种方式并不好.在删除索引期间,索引不可用.会导致阻塞发生。而对于删除聚集索引,则会导致对应的非聚集索引重建两次(删除时重建,建立时再重建).虽然这种方法并不好,但是对于索引的整理最为有效

2.使用DROP_EXISTING语句重建索引

为了避免重建两次索引,使用DROP_EXISTING语句重建索引,因为这个语句是原子性的,不会导致非聚集索引重建两次,但同样的,这种方式也会造成阻塞

3.如前面文章所示,使用ALTER INDEX REBUILD语句重建索引

使用这个语句同样也是重建索引,但是通过动态重建索引而不需要卸载并重建索引.是优于前两种方法的,但依旧会造成阻塞。可以通过ONLINE关键字减少锁,但会造成重建时间加长.

4.使用ALTER INDEX REORGANIZE

这种方式不会重建索引,也不会生成新的页,仅仅是整理,当遇到加锁的页时跳过,所以不会造成阻塞。但同时,整理效果会差于前三种.

时间: 2024-08-28 05:18:28

MSSQL 重建索引(在线重建、控制最大处理器数 、MAXDOP )的相关文章

[转]Oracle 重建索引的必要性

http://blog.csdn.net/leshami/article/details/23763963 索引重建是一个争论不休被不断热烈讨论的议题.当然Oracle官方也有自己的观点,我们很多DBA也是遵循这一准则来重建索引,那就是Oracle建议对于索引深度超过4级以及已删除的索引条目至少占有现有索引条目总数的20% 这2种情形下需要重建索引.近来Oracle也提出了一些与之相反的观点,就是强烈建议不要定期重建索引.本文是参考了1525787.1并进行相应描述. 1.重建索引的理由 a.O

Oracle性能分析10:重建索引续-常用SQL

上一节讲了重建索引的原因和重建方法,这节继续介绍几个常用的SQL语句和存储过程. 查询所有失效的全局索引 select index_name, status from user_indexes where table_name = upper(table_name) and status = 'UNUSABLE' 查询所有失效的分区索引 select index_name, status from user_ind_partitions where index_name in (select i

Oracle性能分析9:重建索引

当索引出现问题时,会导致严重的性能问题,索引问题包括索引不可用.索引碎片导致性能下降,我们需要一些手段在检测索引的问题,并解决这些问题.这一篇将为你讲述怎么定位索引问题,并提供了解决的办法. 索引不可用 索引不可用的原因有很多,包括: 1)索引空间耗尽,导致SQL*Loader更新索引失败: 2)创建索引的过程中实例失败: 3)唯一键有重复值: 4)某个索引的顺序与sorted indexes子句中指定的顺序不同: 5)移动表或表分区(alter table move和alter table m

Pandas | 08 重建索引

重新索引会更改DataFrame的行标签和列标签. 可以通过索引来实现多个操作: 重新排序现有数据以匹配一组新的标签. 在没有标签数据的标签位置插入缺失值(NA)标记. import pandas as pd import numpy as np N=20 df = pd.DataFrame({ 'A': pd.date_range(start='2016-01-01',periods=N,freq='D'), 'x': np.linspace(0,stop=N-1,num=N), 'y': n

重建索引时,一些数值

重建索引,表记录1.4亿条,晚上九点半左右执行,几个数值,记录下来供参考 ALTER INDEX IX_IndustryIdLv2_UpdateTime ON dbo.Product_Info REBUILD WITH (ONLINE = ON)--晚上21:30执行用时11:17 ALTER INDEX IX_UserId_UpdateTime ON dbo.Product_Info REBUILD WITH (ONLINE = ON)--晚上21:30执行用时06:05 执行时,user c

对比:重建索引与更新统计

最近经常被问到的一个问题是关于在数据库维护过程,重建索引与更新统计的执行先后次序.通常,需要考虑以下几点,这里注意的是有两种统计:索引统计.列统计. 1)默认情况下,UPDATE STATISTICS 将会更新索引统计和列统计,如果语句中仅使用了COLUMNS选项,则只更新列统计,若仅使用了INDEX选项,则只更新索引统计 2)默认情况下,UPDATE STATISTICS语句仅采样表的一部分数据,使用UPDATE STATISTICS WITH FULLSCAN则会扫描全表 3)重建索引(如使

移动表到新表空间后重建索引

将某个表空间内的多个数据库表移动到另一个表空间后,由于没有处理索引,导致到新库中查询.插入等操作时,oracle报错: ORA-01502: 索引 'WWYSBI41.SYS_C0027004' 或这类索引的分区处于不可用状态 原因是仍用了之前表空间的索引,解决办法是重建这些索引. 对单个表索引, alter index <index_name> rebuild (online) 注:上面的index_name外面的<和>只是表示这是一个变量,并不是真的要加<与>. 对

DBCC DBREINDEX重建索引提高SQL Server性能

大多数SQL Server表需要索引来提高数据的访问速度,如果没有索引,SQL Server 要进行表格扫描读取表中的每一个记录才能找到索要的数据.索引可以分为簇索引和非簇索引,簇索引通过重排表中的数据来提高数据的访问速度,而非簇索引则通过维护表中的数据指针来提高数据的索引. 1. 索引的体系结构 为什么要不断的维护表的索引?首先,简单介绍一下索引的体系结构.SQL Server在硬盘中用8KB页面在数据库文件内存放数据.缺省情况下这些页面及其包含的数据是无组织的.为了使混乱变为有序,就要生成索

索引的重建与查询

sp_helpindex 'tablename' ---------------------------------------------------------------------------------- --查询当前数据库的所有索引值 SELECT database_id,object_id,index_id,object_name(object_id) as table_name, avg_fragmentation_in_percent,fragment_count, avg_f