热门标签 | HotTags
当前位置:  开发笔记 > 数据库 > 正文

SQLServer2005评估和管理索引

SQLServer2005动态管理视图(DMVs)返回会话、事务、请求的服务器状态信息。它可用于诊断、内存和过程调优、监控(SQLServer2000不支持)。SQLServer引擎跟踪详细的资源使用情况,用select语句从DMVs中可查到,但是这些信息不会长期驻留在磁盘上。由于索引提供

SQLServer2005动态管理视图(DMVs)返回会话、事务、请求的服务器状态信息。它可用于诊断、内存和过程调优、监控(SQLServer2000不支持)。SQLServer引擎跟踪详细的资源使用情况,用select语句从DMVs中可查到,但是这些信息不会长期驻留在磁盘上。 由于索引提供

  SQLServer2005动态管理视图(DMVs)返回会话、事务、请求的服务器状态信息。它可用于诊断、内存和过程调优、监控(SQLServer2000不支持)。SQLServer引擎跟踪详细的资源使用情况,用select语句从DMVs中可查到,但是这些信息不会长期驻留在磁盘上。

  由于索引提供了代替表扫描的一个选择,,且DMVs返回索引使用计数,所以可以比较索引的成本和其性能。这个比较包括保持索引最新的成本,与使用索引而不是表扫描读数据的性能之比。谨记一个更新或删除操作先要读数据从而定位数据,然后对定位的数据进行写操作。一个插入操作在所有的索引上只是写操作。因此,一个大量的插入将使写操作次数超过读操作次数。一个大量的更改操作(包括更新和删除),读和写的次数通常很接近(假定没有'记录找不到'的情况发生)。一个大量的读操作,读的次数将超过写。引用约束如外键还要求额外的读操作(对于插入、更新、删除而言)去确保引用完整性得到维护

  哪些表和索引是没用或者很少用的?

  ---1. 未使用的表和索引。表都有一个索引ID,如果是0则为堆表,1则为聚集索引

  Declare @dbid int

  Select @dbid = db_id('Northwind')

  Select objectname=object_name(i.object_id)

  , indexname=i.name

  , i.index_id

  from sys.indexes i, sys.objects o

  where objectproperty(o.object_id,'IsUserTable') = 1

  and i.index_id NOT IN (select s.index_id

  fromsys.dm_db_index_usage_stats s

  where s.object_id=i.object_idand

  i.index_id=s.index_id and

  database_id = @dbid )

  and o.object_id = i.object_id

  order by objectname,i.index_id,indexname asc

  --2.缺失的索引

  SELECT TOP 50

  [Total Cost] = ROUND(avg_total_user_cost * avg_user_impact * (user_seeks + user_scans),0)

  , avg_user_impact

  , TableName = statement

  , [EqualityUsage] = equality_columns

  , [InequalityUsage] = inequality_columns

  , [Include Cloumns] = included_columns

  ,user_seeks , user_scans

  FROM sys.dm_db_missing_index_groups g

  INNER JOIN sys.dm_db_missing_index_group_stats s

  ON s.group_handle = g.index_group_handle

  INNER JOIN sys.dm_db_missing_index_details d ON d.index_handle = g.index_handle

  WHERE statement LIKE '%tablename%'

  ORDER BY [Total Cost] DESC;

  --3.使用很少的索引和频繁使用的索引一样,都会记录在sys.dm_db_index_usage_stats中。为了找出这些索引,需要查看 诸如user_seeks、 user_scans、user_lookups和user_updates的列。

  ;WITH IXC AS(

  SELECT IXC.object_id,

  IXC.index_id,

  IXC.index_column_id,

  IXC.is_descending_key,

  IXC.is_included_column,

  column_name = C.name

  FROM sys.index_columns IXC

  INNER JOIN sys.columns C ON IXC.object_id = C.object_id AND IXC.column_id = C.column_id

  )

  SELECT TOP 50

  o.name AS 表名

  , i.name AS 索引名

  , i.index_id AS 索引id

  , dm_ius.user_seeks AS 搜索次数

  , dm_ius.user_scans AS 扫描次数

  , dm_ius.user_lookups AS 查找次数

  , dm_ius.user_updates AS 更新次数

  , p.TableRows as 表行数

  ,index_columns = Stuff(IXC_COL.index_columns,1,2,N'')

  ,index_columns_include = Stuff(IXC_COL_INCLUDE.index_columns_include,1,2,N'')

  ,'DROP INDEX ' + QUOTENAME(s.name) + '.' + QUOTENAME(OBJECT_NAME(i.OBJECT_ID))

  + '.' + QUOTENAME(i.name) AS '删除语句'

  FROM sys.dm_db_index_usage_stats dm_ius

  INNER JOIN sys.indexes i ON i.index_id = dm_ius.index_id AND dm_ius.OBJECT_ID = i.OBJECT_ID

  INNER JOIN sys.objects o ON dm_ius.OBJECT_ID = o.OBJECT_ID

  INNER JOIN sys.schemas s ON o.schema_id = s.schema_id

  INNER JOIN (SELECT SUM(p.rows) TableRows, p.index_id, p.OBJECT_ID

  FROM sys.partitions p GROUP BY p.index_id, p.OBJECT_ID) p

  ON p.index_id = dm_ius.index_id AND dm_ius.OBJECT_ID = p.OBJECT_ID

  CROSS APPLY(

  SELECT index_columns = (

  SELECT N', ' + quotename(column_name) + CASE is_descending_key

  WHEN 1 THEN N' DESC '

  ELSE N''

  END

  FROM IXC

  WHERE object_id = I.object_id

  AND index_id = I.index_id

  AND is_included_column = 0

  ORDER BY index_column_id

  FOR xml path(''),root('r'),TYPE

  )。value('/r[1]','nvarchar(max)')

  ) IXC_COL

  OUTER APPLY(

  SELECT index_columns_include = (

  SELECT N', ' + quotename(column_name)

  FROM IXC

  WHERE object_id = I.object_id

  AND index_id = I.index_id

  AND is_included_column = 1

  ORDER BY index_column_id

  FOR xml path(''),root('r'),TYPE

  )。value('/r[1]','nvarchar(max)')

  ) IXC_COL_INCLUDE

  WHERE OBJECTPROPERTY(dm_ius.OBJECT_ID,'IsUserTable') = 1

  AND dm_ius.database_id = DB_ID()

  --AND i.type_desc = 'nonclustered'

  --AND i.is_primary_key = 0

  --AND i.is_unique_cOnstraint= 0

  and o.name='tablename' --根据实际修改表名

  ORDER BY (dm_ius.user_seeks + dm_ius.user_scans + dm_ius.user_lookups) ASC

  结论:user_updates很大,而发现user_seeks和user_scans很少或者就是0,那就说明该索引一直在更新,

  但是从来不被使用,仅仅创建和修改,没有为查询提供任何帮助,就可以考虑删除了

推荐阅读
  • 本文探讨了在Windows Server 2008环境下配置Tomcat使用80端口时遇到的问题,包括端口被占用、多项目访问失败等,并提供详细的解决方法和配置建议。 ... [详细]
  • 探讨如何真正掌握Java EE,包括所需技能、工具和实践经验。资深软件教学总监李刚分享了对毕业生简历中常见问题的看法,并提供了详尽的标准。 ... [详细]
  • Windows服务与数据库交互问题解析
    本文探讨了在Windows 10(64位)环境下开发的Windows服务,旨在定期向本地MS SQL Server (v.11)插入记录。尽管服务已成功安装并运行,但记录并未正确插入。我们将详细分析可能的原因及解决方案。 ... [详细]
  • 本文详细介绍了如何使用PHP检测AJAX请求,通过分析预定义服务器变量来判断请求是否来自XMLHttpRequest。此方法简单实用,适用于各种Web开发场景。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 深入理解 SQL 视图、存储过程与事务
    本文详细介绍了SQL中的视图、存储过程和事务的概念及应用。视图为用户提供了一种灵活的数据查询方式,存储过程则封装了复杂的SQL逻辑,而事务确保了数据库操作的完整性和一致性。 ... [详细]
  • 本文探讨了 RESTful API 和传统接口之间的关键差异,解释了为什么 RESTful API 在设计和实现上具有独特的优势。 ... [详细]
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • 在当前众多持久层框架中,MyBatis(前身为iBatis)凭借其轻量级、易用性和对SQL的直接支持,成为许多开发者的首选。本文将详细探讨MyBatis的核心概念、设计理念及其优势。 ... [详细]
  • MySQL缓存机制深度解析
    本文详细探讨了MySQL的缓存机制,包括主从复制、读写分离以及缓存同步策略等内容。通过理解这些概念和技术,读者可以更好地优化数据库性能。 ... [详细]
  • MySQL 数据库迁移指南:从本地到远程及磁盘间迁移
    本文详细介绍了如何在不同场景下进行 MySQL 数据库的迁移,包括从一个硬盘迁移到另一个硬盘、从一台计算机迁移到另一台计算机,以及解决迁移过程中可能遇到的问题。 ... [详细]
  • 本文详细介绍了 MySQL 中 LAST_INSERT_ID() 函数的使用方法及其工作原理,包括如何获取最后一个插入记录的自增 ID、多行插入时的行为以及在不同客户端环境下的表现。 ... [详细]
  • 在使用 DataGridView 时,如果在当前单元格中输入内容但光标未移开,点击保存按钮后,输入的内容可能无法保存。只有当光标离开单元格后,才能成功保存数据。本文将探讨如何通过调用 DataGridView 的内置方法解决此问题。 ... [详细]
  • SQLite 动态创建多个表的需求在网络上有不少讨论,但很少有详细的解决方案。本文将介绍如何在 Qt 环境中使用 QString 类轻松实现 SQLite 表的动态创建,并提供详细的步骤和示例代码。 ... [详细]
  • 本文探讨了在通过 API 端点调用时,使用猫鼬(Mongoose)的 findOne 方法总是返回 null 的问题,并提供了详细的解决方案和建议。 ... [详细]
author-avatar
猪可夫司机
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有