Sql Server 重建索引提高SQL Server性能
2013-01-30 10:42
316 查看
大多数SQL Server表需要索引来提高数据的访问速度,如果没有索引,SQL Server要全表进行扫描读取表中的每一个记录才能找到所要的数据
可以通过DBCC SHOWCONTIG来确定是否需要重构表的索引。
DBCC SHOWCONTIG用法
以PSNACCOUNT数据表作为例子
DECLARE @table_id INT
SET @table_id=object_id('PSNACCOUNT')
DBCC SHOWCONTIG(@table_id)
DBCC SHOWCONTIG 正在扫描 'PSNACCOUNT' 表...
表: 'PSNACCOUNT' (2005582183);索引 ID: 1,数据库 ID: 6
已执行 TABLE 级别的扫描。
- 扫描页数................................: 1960
- 扫描区数..............................: 252
- 区切换次数..............................: 1957
- 每个区的平均页数........................: 7.8
- 扫描密度 [最佳计数:实际计数].......: 12.51% [245:1958]
- 逻辑扫描碎片 ..................: 99.13%
- 区扫描碎片 ..................: 75.00%
- 每页的平均可用字节数.....................: 3572.0
- 平均页密度(满).....................: 55.87%
DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。
信息 描述
Pages Scanned 表或索引中的长页数
Extents Scanned 表或索引中的长区页数
Extent Switches DBCC遍历页时从一个区域到另一个区域的次数
Avg. Pages per Extent 相关区域中的页数
Scan Density[Best Count:Actual Count]
Best Count是连续链接时的理想区域改变数,Actual Count是实际区域改变,
Scan Density为100%表示没有分块。
Logical Scan Fragmentation 扫描索引页中失序页的百分比
Extent Scan Fragmentation 不实际相邻和包含链路中所有链接页的区域数
Avg. Bytes Free per Page 扫描页面中平均自由字节数
Avg. Page Density (full) 平均页密度,表示页有多满
从上面命令的执行结果可以看的出来,Best count为245而Actual Count为1958。这表明orders表有分块,需要重构表索引。
下面通过DBCC DBREINDEX来重构表的簇索引。
DBCC DBREINDEX 用法
重建指定数据库中表的一个或多个索引。
语法
DBCC DBREINDEX
(
[ 'database.owner.table_name'
[ , index_name
[ , fillfactor ]
]
]
)
参数
'database.owner.table_name'
是要重建其指定的索引的表名。数据库、所有者和表名必须符合标识符的规则。有关更多信息,请参见使用标识符。如果提供 database 或 owner 部分,则必须使用单引号 (') 将整个 database.owner.table_name 括起来。如果只指定table_name,则不需要单引号。
index_name
是要重建的索引名。索引名必须符合标识符的规则。如果未指定 index_name 或指定为 ' ',就要对表的所有索引进行重建。
fillfactor
是创建索引时每个索引页上要用于存储数据的空间百分比。fillfactor 替换起始填充因子以作为索引或任何其它重建的非聚集索引(因为已重建聚集索引)的新默认值。如果 fillfactor 为 0,DBCC DBREINDEX 在创建索引时将使用指定的起始fillfactor。
DBCC DBREINDEX('dbo.PSNACCOUNT','',90)
DECLARE @table_id INT
SET @table_id=object_id('PSNACCOUNT')
DBCC SHOWCONTIG(@table_id)
DBCC SHOWCONTIG 正在扫描 'PSNACCOUNT' 表...
表: 'PSNACCOUNT' (2005582183);索引 ID: 1,数据库 ID: 6
已执行 TABLE 级别的扫描。
- 扫描页数................................: 1176
- 扫描区数..............................: 147
- 区切换次数..............................: 146
- 每个区的平均页数........................: 8.0
- 扫描密度 [最佳计数:实际计数].......: 100.00% [147:147]
- 逻辑扫描碎片 ..................: 0.00%
- 区扫描碎片 ..................: 3.40%
- 每页的平均可用字节数.....................: 568.6
- 平均页密度(满).....................: 92.97%
DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。
通过结果我们可以看到Scan Denity扫描密度为100%
可是要是一个一个表去整理,是一件比较繁琐的事情。
一次性整理一个数据库中所有SCHEMA为dbo的表的索引的脚本
USE [databasename];
DECLARE @name NVARCHAR(100)
DECLARE authors_cursor CURSOR FOR
SELECT [name] FROM sysobjects WHERE xtype = 'u' ORDER BY id
OPEN authors_cursor
FETCH NEXT FROM Authors_cursor Into @name
WHILE @@Fetch_status = 0
BEGIN
DBCC DBREINDEX (@name, '', 90)
FETCH NEXT FROM Authors_cursor Into @name
END
CLOSE authors_cursor
DEALLOCATE authors_cursor
可以通过DBCC SHOWCONTIG来确定是否需要重构表的索引。
DBCC SHOWCONTIG用法
以PSNACCOUNT数据表作为例子
DECLARE @table_id INT
SET @table_id=object_id('PSNACCOUNT')
DBCC SHOWCONTIG(@table_id)
DBCC SHOWCONTIG 正在扫描 'PSNACCOUNT' 表...
表: 'PSNACCOUNT' (2005582183);索引 ID: 1,数据库 ID: 6
已执行 TABLE 级别的扫描。
- 扫描页数................................: 1960
- 扫描区数..............................: 252
- 区切换次数..............................: 1957
- 每个区的平均页数........................: 7.8
- 扫描密度 [最佳计数:实际计数].......: 12.51% [245:1958]
- 逻辑扫描碎片 ..................: 99.13%
- 区扫描碎片 ..................: 75.00%
- 每页的平均可用字节数.....................: 3572.0
- 平均页密度(满).....................: 55.87%
DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。
信息 描述
Pages Scanned 表或索引中的长页数
Extents Scanned 表或索引中的长区页数
Extent Switches DBCC遍历页时从一个区域到另一个区域的次数
Avg. Pages per Extent 相关区域中的页数
Scan Density[Best Count:Actual Count]
Best Count是连续链接时的理想区域改变数,Actual Count是实际区域改变,
Scan Density为100%表示没有分块。
Logical Scan Fragmentation 扫描索引页中失序页的百分比
Extent Scan Fragmentation 不实际相邻和包含链路中所有链接页的区域数
Avg. Bytes Free per Page 扫描页面中平均自由字节数
Avg. Page Density (full) 平均页密度,表示页有多满
从上面命令的执行结果可以看的出来,Best count为245而Actual Count为1958。这表明orders表有分块,需要重构表索引。
下面通过DBCC DBREINDEX来重构表的簇索引。
DBCC DBREINDEX 用法
重建指定数据库中表的一个或多个索引。
语法
DBCC DBREINDEX
(
[ 'database.owner.table_name'
[ , index_name
[ , fillfactor ]
]
]
)
参数
'database.owner.table_name'
是要重建其指定的索引的表名。数据库、所有者和表名必须符合标识符的规则。有关更多信息,请参见使用标识符。如果提供 database 或 owner 部分,则必须使用单引号 (') 将整个 database.owner.table_name 括起来。如果只指定table_name,则不需要单引号。
index_name
是要重建的索引名。索引名必须符合标识符的规则。如果未指定 index_name 或指定为 ' ',就要对表的所有索引进行重建。
fillfactor
是创建索引时每个索引页上要用于存储数据的空间百分比。fillfactor 替换起始填充因子以作为索引或任何其它重建的非聚集索引(因为已重建聚集索引)的新默认值。如果 fillfactor 为 0,DBCC DBREINDEX 在创建索引时将使用指定的起始fillfactor。
DBCC DBREINDEX('dbo.PSNACCOUNT','',90)
DECLARE @table_id INT
SET @table_id=object_id('PSNACCOUNT')
DBCC SHOWCONTIG(@table_id)
DBCC SHOWCONTIG 正在扫描 'PSNACCOUNT' 表...
表: 'PSNACCOUNT' (2005582183);索引 ID: 1,数据库 ID: 6
已执行 TABLE 级别的扫描。
- 扫描页数................................: 1176
- 扫描区数..............................: 147
- 区切换次数..............................: 146
- 每个区的平均页数........................: 8.0
- 扫描密度 [最佳计数:实际计数].......: 100.00% [147:147]
- 逻辑扫描碎片 ..................: 0.00%
- 区扫描碎片 ..................: 3.40%
- 每页的平均可用字节数.....................: 568.6
- 平均页密度(满).....................: 92.97%
DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。
通过结果我们可以看到Scan Denity扫描密度为100%
可是要是一个一个表去整理,是一件比较繁琐的事情。
一次性整理一个数据库中所有SCHEMA为dbo的表的索引的脚本
USE [databasename];
DECLARE @name NVARCHAR(100)
DECLARE authors_cursor CURSOR FOR
SELECT [name] FROM sysobjects WHERE xtype = 'u' ORDER BY id
OPEN authors_cursor
FETCH NEXT FROM Authors_cursor Into @name
WHILE @@Fetch_status = 0
BEGIN
DBCC DBREINDEX (@name, '', 90)
FETCH NEXT FROM Authors_cursor Into @name
END
CLOSE authors_cursor
DEALLOCATE authors_cursor
相关文章推荐
- DBCC DBREINDEX重建索引提高SQL Server性能
- DBCC DBREINDEX重建索引提高SQL Server性能
- DBCC DBREINDEX重建索引提高SQL Server性能
- [转]DBCC DBREINDEX重建索引提高SQL Server性能
- DBCC DBREINDEX重建索引提高SQL Server性能
- DBCC DBREINDEX重建索引提高SQL Server性能
- DBCC DBREINDEX重建索引提高SQL Server性能【转载】
- SQL2000-DBCC DBREINDEX重建索引提高SQL Server性能
- 重建索引提高SQL Server性能
- DBCC DBREINDEX重建索引提高SQL Server性能
- DBCC DBREINDEX重建索引提高SQL Server性能
- DBCC DBREINDEX重建索引提高SQL Server性能
- DBCC DBREINDEX重建索引提高SQL Server性能
- DBCC DBREINDEX重建索引提高SQL Server性能(转)
- 重建索引提高SQL Server性能
- 重建索引提高SQL Server性能
- 重建索引提高SQL Server性能
- SQL Server通过整理索引碎片和重建索引提高速度
- SQL Server现场优化纪实(二):通过重建索引提高性能
- DBCC DBREINDEX重建索引提高SQL Server性能