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个统计。很明显,这些表的索引策略很差劲。对表及自动创建的与之相关联的统计的快速记数可以帮助您确定哪些表需要索引。
分享到:
相关推荐
除了使用SQL语句之外,还可以使用SQL Server Management Studio (SSMS)的图形界面工具来创建索引。在SSMS中,可以通过右键点击表,选择“设计”选项卡,然后点击“索引/键”按钮来创建索引。 #### 六、创建索引的...
SQL Server 2000的查询优化器会自动选择最佳的执行计划,包括选择合适的索引。理解查询优化器的工作原理可以帮助我们更好地设计和使用索引。 总结,SQL Server 2000的索引优化是数据库性能调优的重要环节。通过对...
首先,标题中的"sqlserver自动生成sql语句工具"指的是可以分析SQL Server数据库结构和数据,自动生成对应的SQL创建语句的软件。这种工具通常能帮助数据库管理员快速获取数据库的定义,便于备份、迁移或在其他环境中...
3. **自动调整**:SQL Server的自动调整功能会在某些情况下自动创建索引,以提高查询性能。 #### 二、查询自动创建的索引 为了查看特定表上的自动创建的索引,可以使用以下步骤: 1. **定义变量**:首先定义一个...
SQL Server 2005 自动备份是通过创建“维护计划”来实现的。维护计划是 SQL Server 2005 中的一种功能,它允许用户根据需要来自动执行备份、还原、数据库检查、索引维护等操作。 维护计划的创建 维护计划可以通过...
在SQL Server 2000中,引入了索引视图的概念,使得视图不仅可以作为数据的安全访问机制和逻辑展示方式,还可以通过创建唯一群集索引和非群集索引来优化查询效率。 传统的视图在运行时会被临时实体化,即每次查询...
当定义一个主键时,SQL Server 会自动为其创建一个聚集索引(除非明确指定为非聚集索引)。 - **关系**:主键可以被视为一种特殊的聚集索引,因为它决定了表中数据的物理存储顺序。使用主键作为聚集索引有助于提高...
2.利用SQL Server配置管理器启动、停止SQL Server服务(包括默认实例和命名实例),配置SQL Server服务为自动启动。 3.利用SQL Server配置管理器配置进行SQL Server 2005网络配置,启用默认实例和命名实例的TCP/IP...
《SQL Server精华 (CHM)_sqlserver_SQLServer笔记_》是一部综合性的SQL Server学习资源,旨在帮助用户深入理解和掌握Microsoft SQL Server数据库管理系统的核心概念、功能和最佳实践。这部笔记涵盖了一系列关键知识...
如果表有主键,SQL Server会自动创建一个唯一的聚集索引。外键列上建立非聚集索引可以提高查询效率,尤其是在频繁使用外键关系时。 索引的创建会生成数据页,这些数据页包含指向数据的指针,有助于加速搜索。填充...
在这个过程中,需要注意的是,在创建全文索引时,“选择更改跟踪”选项被设置为“自动”,这意味着当表中的数据发生更改时,全文索引会自动更新以保持与表数据的一致性。 #### 三、使用全文索引进行查询 全文索引...
创建索引视图需要遵循特定的语法和规则,例如确保视图定义的确定性以及符合SQL Server对视图的要求等。 #### 十四、使用SET选项获得一致的结果 为了确保在创建索引视图时获得一致的结果,需要设置特定的选项,如`...
在SQL Server 2005中,可以为分区表创建索引,进一步提升查询性能。分区索引是一种特殊的非聚集索引,它在每个分区上都有独立的索引结构,从而允许索引查询直接定位到目标分区。 - 分区索引的创建:可以使用...
5. **模板与片段**:预定义的SQL模板和自定义代码片段,让我们能够快速访问常用的SQL语句,比如创建表、索引、视图等,进一步提高工作效率。 6. **版本控制集成**:Sql Prompt与常见的版本控制系统(如Git)无缝...
- 主键索引:确保数据唯一性,通常自动创建在主键列上。 - 非聚簇索引:不包含数据行的物理位置,仅存储键值和指向数据行的指针。 - 聚簇索引:索引结构决定了数据在磁盘上的物理存储顺序,每个表只能有一个聚簇...
提供的文档 "SqlServer2005数据库自动备份流程.doc" 可能详细介绍了如何配置 SQL Server Agent 作业以及创建备份脚本的步骤,这对于了解具体操作过程非常有用。 10. **安全性**: 记住备份文件同样需要保护,避免...
在SQL Server 2008中,创建数据库是管理和存储数据的第一步,是构建数据库管理系统的基础。本章详细讲解了如何在SQL Server 2008中创建和管理数据库,涵盖了数据库的基本概念、常用数据库对象及其操作。 首先,了解...
总的来说,SqlServer 索引自动优化工具通过分析执行计划,统计查询行为,自动化创建和调整索引,旨在提高数据库性能,减少无效索引,优化整体数据库架构。这种方法对于处理大量表的索引优化具有较高的效率和实用性。...
维护计划支持多种任务,如数据库备份、索引优化、统计信息更新等,且可通过SQL Server Agent按计划自动执行。 #### 实现数据库定时自动备份 在SQL Server 2008中,实现数据库定时自动备份主要依赖于两种方法:使用...
- **任务和作业**:SQL Server Agent图标通常与计划的任务和自动化作业相关。 3. **系统图标** "系統图标"可能是指SQL Server中与系统相关的图标,例如系统数据库(如master、model、msdb和tempdb)的图标,或者...