SQL Server如何识别自动创建的索引
http://www.weaseek.com 2007-12-03 15:30:00 来源:搜讯网社区
最近发现sysindexes索引表中的很多条目并不是我自己创建的。听同事说它们并不是真正的索引,而是SQL Server查询优化器自动创建的统计。怎样才能识别哪些是真正的索引,哪些是SQL Server自动创建的统计呢?
问:最近我发现sysindexes索引表中的很多条目并不是我自己创建的。听同事说它们并不是真正的索引,而是SQL Server查询优化器自动创建的统计。怎样才能识别哪些是真正的索引,哪些是SQL Server自动创建的统计呢?
答:按照默认设置,如果表中的某列没有索引,则SQL Server会自动为该列创建统计。然后,查询优化器评估该列中数据分布范围的统计信息,以选择一个更为有效的查询处理方案。分辨自动创建的统计很简单,在SQL Server 7.0和SQL Server 2000中,自动创建的统计的前缀为_WA_Sys。
您还可以使用INDEXPROPERTY()函数的IsAutoStatistics属性来区分一个索引是真正的还是自动创建的统计,让SQL Server优化器选择需要创建的统计。您还可以为您管理的数据库启用“自动创建统计表”选项。
很多人忽略了下面的明显的结论。自动创建统计的存在意味着某个真正的索引可能会从中受益。请考虑下列代码的输出:
USE tempdb
GO
IF OBJECTPROPERTY(OBJECT_ID('dbo.orders'), 'IsUserTable')=1
DROP TABLE dbo.orders
GO
SELECT * INTO tempdb..orders FROM northwind..orders
GO
SELECT * FROM tempdb..orders WHERE orderid = 10248
GO
SELECT * FROM tempdb..sysindexes WHERE id = object_id('orders')
AND name LIKE
'_wa_sys%'
GO
|
该代码在tempdb中复制Northwind Orders表,选择一行,然后检查SQL Server是否添加了一个统计。很显然,该表没有OrderId列的索引,所以SQL Server自动创建了名为_WA_Sys_OrderID_58D1301D 的统计。OrderId列统计表的存在表明Northwind Orders表将得益于附加的索引。
以下查询显示了为数据库中每个用户表自动创建的统计的数量,该数据库至少有一个自动创建的统计。
SELECT
object_name(id) TableName
,count(*) NumberOfAutoStats
FROM
sysindexes
WHERE
OBJECTPROPERTY(id, N'IsUserTable') = 1
AND INDEXPROPERTY ( id , name , 'IsAutoStatistics' ) = 1
GROUP BY
object_name(id)
ORDER BY
count(*) DESC
|
并不是所有的统计都可被真正的索引所替代。在某些情况下,SQL Server会为一个表自动创建超过50个统计。很明显,这些表的索引策略很差劲。对表及自动创建的与之相关联的统计的快速记数可以帮助您确定哪些表需要索引。
分享到:
相关推荐
2.利用SQL Server配置管理器启动、停止SQL Server服务(包括默认实例和命名实例),配置SQL Server服务为自动启动。 3.利用SQL Server配置管理器配置进行SQL Server 2005网络配置,启用默认实例和命名实例的TCP/IP...
第2部分为SQLServer 2008的准备篇,介绍了SQL Server 2008的功能、特性、各版本的比较、安装方法、SQL Server 2008的服务、客户端的工具等;第3部分为SQL Server 2008的基本操作篇,介绍如何管理与配置SQL Server ...
C#编程程序的时候,让程序自动创建数据表,然后给数据表添加索引,这个方法是在百度百科找到,我自已只是简单的修改了一下
7.5.1 配置SQL Server自动管理文件大小 7.5.2 手动扩展数据库和日志 7.5.3 手动压缩和收缩数据库 7.6 操作数据库 7.6.1 重命名数据库 7.6.2 清除和删除数据库 7.6.3 附加和分离数据库 7.7 提示和技巧 7.7.1 复制和...
7.5.1 配置SQL Server自动管理文件大小 7.5.2 手动扩展数据库和日志 7.5.3 手动压缩和收缩数据库 7.6 操作数据库 7.6.1 重命名数据库 7.6.2 清除和删除数据库 7.6.3 附加和分离数据库 7.7 提示和技巧 7.7.1 复制和...
7.5.1 配置SQL Server自动管理文件大小 7.5.2 手动扩展数据库和日志 7.5.3 手动压缩和收缩数据库 7.6 操作数据库 7.6.1 重命名数据库 7.6.2 清除和删除数据库 7.6.3 附加和分离数据库 7.7 提示和技巧 7.7.1 复制和...
.NET Framework 2.0 由 Microsoft Visual Studio 2005 和所有版本的 SQL Server 2005 自动安装。 [顶部] 2.2 SQL Server Express SQL Server Express 可从此 Microsoft 网站下载获得。 注意: 下载和提取产品...
第22章 SQLServer的自动化管理565 第23章 SQLServer的性能工具584 第24章 SQLServer邮件590 第25章 数据导入与导出601 第26章 AnalysisServices607 第27章 ReportingServices624 第28章 SQLServer与XML634 ...
第22章 SQLServer的自动化管理565 第23章 SQLServer的性能工具584 第24章 SQLServer邮件590 第25章 数据导入与导出601 第26章 AnalysisServices607 第27章 ReportingServices624 第28章 SQLServer与XML634 ...
【赛迪网-IT技术报道】SQL Server数据库查询速度慢的原因有很多,常见的有以下几种: 1、没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷) 2、I/O吞吐量小,形成了瓶颈效应。 3、没有...
(5)将100万行网络连接监控数据Netflow导入数据库,创建多个索引,观察创建索引对数据库文件大小的影响;并设计不同的查询语句来观察索引对查询效率的影响;可以尝试将100万行记录扩展为1000万行,然后再做索引和...
第22章 SQLServer的自动化管理565 第23章 SQLServer的性能工具584 第24章 SQLServer邮件590 第25章 数据导入与导出601 第26章 AnalysisServices607 第27章 ReportingServices624 第28章 SQLServer与XML634 ...
书名: SQLServer2008查询性能优化 作者: 弗里奇(Grant Fritchey) 出版社: 人民邮电出版社 出版日期: 2010年8月1日 ISBN: 9787115230294 编辑推荐 《SQL Server 2008查询性能优化》为你提供了处理查询性能所...
dbForgeStudioforSQLServer是一个强大的IDE,用于SQLServer管理,管理,开发,数据报告和分析。该工具将帮助SQL开发人员执行复杂的数据库更改,流行的源代码控制系统中的版本控制数据库更改,以及加速常规任务。您不...
书名: SQLServer2008查询性能优化 作者: 弗里奇(Grant Fritchey) 出版社: 人民邮电出版社 出版日期: 2010年8月1日 ISBN: 9787115230294 编辑推荐 《SQL Server 2008查询性能优化》为你提供了处理查询性能所...
7.5.1 配置SQL Server自动管理文件大小 186 7.5.2 手动扩展数据库和日志 187 7.5.3 手动压缩和收缩数据库 187 7.6 操作数据库 191 7.6.1 重命名数据库 191 7.6.2 清除和删除数据库 192 7.6.3 附加和...
● 如果数据库中AUTO_CREATE_STATISTICS被设置为ON,SQLServer将会自动对查询中用到的,且没有索引的列自动创建统计信息。 AUTO_CREATE_STATISTICS选项: 当把该选项设为ON时,查询优化器会对在
7.5.1 配置SQL Server自动管理文件大小 186 7.5.2 手动扩展数据库和日志 187 7.5.3 手动压缩和收缩数据库 187 7.6 操作数据库 191 7.6.1 重命名数据库 191 7.6.2 清除和删除数据库 192 7.6.3 附加和...
SQLServer安全及性能优化 修补漏洞 安装程序补丁修补漏洞 随时关注微软官方网站补丁升级 关闭不必要的端口 关闭联必要的服务 数据库引擎 SQL Server Analysis Services SQL Server Reporting Services SQL ...