统计信息的作用:查询优化器使用统计信息来估计查询结果中的基数或行数,查询优化器就可以创建高质量的查询计划。
数据库引擎可以使用统计信息中的任何数据计算基数估计。
例如,查询优化器可以使用基数估计,在查询计划中选择索引查找运算符而不是索引扫描运算符,避免消耗大量资源的索引扫描,提高查询性能。
调用CREATE STATISTICS语句,可以对不是统计信息对象中第一列的列,创建单列统计信息。
创建单列统计信息会增加直方图的数目,这可能会改进基数估计、查询计划和查询性能。
统计信息对象的第一列具有直方图;其他列不具有直方图。
1、创建有主键的表,会自动建立聚集索引,自动生成索引所对应的统计信息
create table txt(id numeric(10,0) primary key,
v varchar(20),
vv int )
2、建立非聚集索引后自动生成索引所对应的统计信息
create index txt_v on txt(v)
insert into txt
select object_id,
type_desc,
schema_id
from sys.objects
where LEN(type_desc) < 20
3、手动创建统计信息的方式:
3.1创建统计信息,通过扫描表或索引视图中的所有行来计算统计信息
create statistics txtStats
on dbo.txt(v,vv)
with fullscan
3.2采用为10%的行
create statistics txtStatsPercent
on dbo.txt(v,vv)
with sample 10 percent
3.3采样为100行
create statistics txtStatsRow
on dbo.txt(v,vv)
where id < 1000 --使用筛选谓词创建的统计信息
with sample 100 rows,
norecompute --覆盖数据库选项选项AUTO_STATISTICS_UPDATE
--查询优化器将完成statistics_name的任何正在进行中的统计信息更新
--并禁用将来的更新