分布页面并不是每次一个记录更新时都要进行更新.在大型数据库中,这会导致巨大的性能损失.因此,当用户初始创建一个空表时,分布页面仍是空的.它仅在发生如下情况时才被更新:
1.用户在一个已存在数据表上创建一个索引.
2.用户进行了update satatic语句
从系统管理员角度来看,用户应该创建一个工具来自动地更新分布页面.自动更新应该至少每周一次,如果数据量每天增加10%以上则应每天一次.
因为不可能每天都添加索引,用户需要使用update statistics语句更新分布页面,用以优化SQLserver.
UPDATE STATISTICS
在指定的表或索引视图中,对一个或多个统计组(集合)有关键值分发的信息进行更新。若要基于列生成统计,请参见 CREATE STATISTICS。
语法
UPDATE STATISTICS table | view
[
index
| ( statistics_name [ ,...n ] )
]
[ WITH
[
[ FULLSCAN ]
| SAMPLE number { PERCENT | ROWS } ]
| RESAMPLE
]
[ [ , ] [ ALL | COLUMNS | INDEX ]
[ [ , ] NORECOMPUTE ]
]
参数
table | view
要更新统计的表或索引视图的名称。表名和视图名必须符合标识符的规则。有关更多信息,请参见使用标识符。由于索引名在每个数据库中不唯一,所以必须指定 table 或 view。可选择指定数据库、表或视图所有者。只有在 Microsoft? SQL Server? 2000 企业版中才支持索引视图。
index
要更新统计的索引。索引名必须符合标识符的规则。如果未指定 index,则更新指定表或索引视图中的所有索引的分发统计。若要查看索引名和描述的列表,请带表名或视图名执行 sp_helpindex。
statistics_name
要更新的统计组(集合)的名称。统计名称必须符合标识符规则。有关生成统计组的更多信息,请参见 CREATE STATISTICS。
n
是表示可以指定多个 statistic_name 组的占位符。
FULLSCAN
指定应读取 table 或 view 中的所有行以收集统计。FULLSCAN 提供与 SAMPLE 100 PERCENT 相同的行为。FULLSCAN 不能与 SAMPLE 选项一起使用。
SAMPLE number { PERCENT | ROWS }
当为较大的表或视图收集统计时,指定要采样的表或索引视图的百分比或行数。number 只允许使用整数,无论它是 PERCENT 还是 ROWS。若要对较大的表或视图使用默认采样行为,请将 SAMPLE number 和 PERCENT 或 ROWS 一起使用。Microsoft SQL Server 将确保值的采样数不低于某一数目,以保证统计有用。如果 PERCENT、ROWS 或 number 选项导致要采样的行数过小,SQL Server 则自动根据表或视图中的现有行数改正采样。
说明 默认行为是在目标表或索引视图上进行采样扫描。SQL Server 自动计算所需的样本大小。
RESAMPLE
指定使用从所有现有统计(包括索引)继承的采样速率来收集统计。如果采样速率导致要采样的行过少,SQL Server 则自动根据表或视图中的现有行数改正采样。
ALL | COLUMNS | INDEX
指定 UPDATE STATISTICS 语句是否影响列统计、索引统计或所有现有统计。如果未指定选项,则 UPDATE STATISTICS 语句影响所有的统计。每个 UPDATE STATISTICS 语句只能指定一种类型(ALL、COLUMNS 或 INDEX)。
NORECOMPUTE
指定过期统计不自动重新计算。统计过期与否取决于在索引列上进行的 INSERT、UPDATE 和 DELETE 操作的数量。指定该选项时,将导致 SQL Server 禁用自动统计重建功能。若要还原自动统计重新计算,请重新执行 UPDATE STATISTICS(不要 NORECOMPUTE 选项),或者执行 sp_autostats。
重要 禁用自动统计重新计算会导致 SQL Server 查询优化器对于涉及指定表的查询选择非最佳的策略。
注释
SQL Server 保留每个索引中关于键值分发的统计,并且使用这些统计来决定查询处理中使用哪个(或哪些)索引。用户可以通过使用 CREATE STATISTICS 语句生成基于非索引列的统计。查询优化依赖于分发步骤的准确性:
如果索引中的键值有显著变化,请对此索引重新运行 UPDATE STATISTICS。
如果索引列中添加、更改或删除大量数据(即如果键值分发更改),或者用 TRUNCATE TABLE 语句将表截断然后重新填充,请使用 UPDATE STATISTICS。
若要查看统计最近一次更新的时间,请使用 STATS_DATE 函数。
只有当能够在计算列上创建索引时,才可以在包含这些计算列的表上创建或更新统计。有关在计算列上创建索引的要求和限制的更多信息,请参见 CREATE INDEX。
权限
UPDATE STATISTICS 权限默认授予表或视图的所有者,并且该权限不可转让。
示例
A. 更新单个表的所有统计
本示例更新表 authors 上的所有索引分发统计。
UPDATE STATISTICS authors
B. 仅更新单一索引的统计
本示例仅更新表 authors 的索引 au_id_ind 的分发信息。
UPDATE STATISTICS authors au_id_ind
C. 使用 50% 采样更新特定统计组(集合)的统计
本示例首先创建表 authors 中 au_lname 列和 au_fname 列的统计组,然后对其进行更新。
CREATE STATISTICS anames
ON authors (au_lname, au_fname)
WITH SAMPLE 50 PERCENT
GO
-- Time passes. The UPDATE STATISTICS statement is then executed.
UPDATE STATISTICS authors(anames)
WITH SAMPLE 50 PERCENT
GO
D. 使用 FULLSCAN 和 NORECOMPUTE 更新特定统计组(集合)的统计
本示例更新表 authors 中的 anames 统计组(集合),强制对表 authors 中的所有行进行完全扫描,并且关闭该统计组(集合)的自动统计更新。
UPDATE STATISTICS authors(anames)
WITH FULLSCAN, NORECOMPUTE
sp_updatestats对当前数据库中所有用户定义的表运行 UPDATE STATISTICS。
语法
sp_updatestats [[@resample =] ''resample'']
返回代码值
0(成功)或 1(失败)
参数
[@resample =] ''resample''
指定 sp_updatestats 将使用 UPDATE STATISTICS 命令的 RESAMPLE 选项。新统计表将继承旧统计表的采样比率。如果未指定 ''resample'',则 sp_updatestats 使用默认采样更新统计表。该参数的数据类型为 varchar(8),默认值为 ''NO''。
注释
sp_updatestats 会显示表示其进度的消息。完成更新之后,该存储过程将报告已为所有的表更新了统计信息。
权限
只有 DBO 和 sysadmin 固定服务器角色的成员才能执行该过程。
示例
下例为数据库 pubs 中的表更新统计信息。
USE pubs
EXEC sp_updatestats
数据库索引
原创文章如转载,请注明:转载自悠悠博客 [ http://www.ajaxstu.com/ ]
相关文章:
- join 方式(2007-11-11 8:59:26)
- 堵死SQLServer注入漏洞(2007-9-8 1:27:12)
- 生成测试数据 T-SQL系列(2007-8-17 11:43:20)
- SQLServer性能分析(2007-7-27 7:39:49)
- Transact_SQL索引(2007-7-20 8:14:19)
- SQLServer和XML的集成(2007-7-1 9:21:28)
- SQLServer的安全性问题(结合iis和.net)(2007-6-24 1:19:48)
- 获取表中记录的总行数(2007-6-13 4:0:34)
- SQL Server中的单引号(2007-6-11 1:9:7)
- 数据分组(2007-6-9 4:53:2)
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。
