Sql Server 索引使用情况及优化的相关Sql语句分享

我来为您详细讲解一下“Sql Server 索引使用情况及优化的相关Sql语句分享”的攻略。

一、索引使用情况的查看

1.1 查看表索引的使用情况

使用以下命令可以查看表的索引使用情况:

SELECT OBJECT_NAME(s.[object_id]) AS [Object Name], 
       i.name AS [Index Name], 
       s.user_seeks,
       s.user_scans,
       s.user_lookups,
       s.user_updates,
       s.last_user_seek,
       s.last_user_scan,
       s.last_user_lookup,
       s.last_user_update
FROM sys.dm_db_index_usage_stats s
INNER JOIN sys.indexes i 
    ON s.object_id = i.object_id
    AND s.index_id = i.index_id
WHERE OBJECTPROPERTY(s.[object_id],'IsUserTable') = 1
ORDER BY [Object Name], [Index Name];

该脚本可以列出每个表的索引及其使用情况,其中包括 user_seeksuser_scansuser_lookups 三个指标:

  • user_seeks:索引被使用进行精确查找的次数;
  • user_scans:索引被扫描的次数;
  • user_lookups:所有表查询中使用该索引进行查找的次数。

使用此脚本,可以了解哪些索引很少使用或几乎没被使用,进而优化这些索引。

1.2 查看每个索引最近使用的时间

使用以下命令可以查看每个索引在数据库中最近一次被使用的时间:

SELECT OBJECT_NAME(s.object_id) AS [Table Name], 
       i.name AS [Index Name], 
       s.last_user_seek,
       s.last_user_scan,
       s.last_user_lookup
FROM sys.dm_db_index_usage_stats s
INNER JOIN sys.indexes i 
    ON s.object_id = i.object_id
    AND s.index_id = i.index_id
WHERE OBJECTPROPERTY(s.object_id,'IsUserTable') = 1;

该脚本查看了每个表的索引的最近使用情况,包括 last_user_seeklast_user_scanlast_user_lookup 三个指标,这些指标可以告诉我们,每个索引实际上最近一次被查找的时间是什么,这对于我们优化索引至关重要。

二、索引优化的方法

2.1 索引优化的方法

使用以下命令可以查看索引的建议及数据库的实际情况:

SELECT
    OBJECT_NAME(s.object_id) AS [Table Name],
    i.name AS [Index Name],
    i.type_desc AS [Index Type],
    i.is_primary_key AS [Primary Key?],
    i.is_unique AS [Unique?],
    i.fill_factor AS [Fill Factor],
    s.avg_fragmentation_in_percent AS [Avg Fragmentation %],
    s.page_count AS [Page Count]
FROM sys.dm_db_index_physical_stats(DB_ID(),NULL,NULL,NULL,NULL) s
INNER JOIN sys.indexes i ON s.object_id = i.object_id AND s.index_id = i.index_id
ORDER BY [Avg Fragmentation %] DESC OPTION (RECOMPILE);

该脚本可以查询数据库中所有表的索引的平均碎片化度、索引页数等信息,根据这些信息,可以确定哪些索引需要优化,比如:

  • 平均碎片化度过高的索引需要进行重建或重新组织;
  • 页面数量过大的索引可能会影响查询的性能,需要考虑拆分或优化索引等。

2.2 慢查询的优化

使用以下命令可以查询慢查询的情况:

SELECT TOP 20
    total_worker_time/execution_count AS [Avg CPU Time],
    total_elapsed_time/execution_count AS [Avg Duration],
    (SELECT TOP 1 [text]
        FROM sys.dm_exec_sql_text([sql_handle])) AS [Query Text],
    creation_time AS [Cached Time],
    execution_count,
    total_worker_time,
    total_elapsed_time
FROM sys.dm_exec_query_stats 
WHERE total_elapsed_time/execution_count > 300000 -- 只查看执行时间超过5分钟的查询
ORDER BY [Avg Duration] DESC;

该脚本可以查询执行时间超过5分钟的查询,并且按照平均持续时间排序。

使用此脚本,我们可以分析慢查询的执行计划,进而优化查询,例如增加或优化索引等。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Sql Server 索引使用情况及优化的相关Sql语句分享 - Python技术站

(0)
上一篇 2023年5月21日
下一篇 2023年5月21日

相关文章

  • windows Server 2008各版本区别详解

    Windows Server 2008各版本区别详解 1. Windows Server 2008版本介绍 Windows Server 2008是由微软开发的服务器操作系统,发行于2008年。它有多个版本,每个版本针对不同的企业需求。下面是Windows Server 2008各版本的详细介绍。 2. Windows Server 2008版本特点比较 2…

    database 2023年5月22日
    00
  • 最详细的SQL注入相关的命令整理 (转)

    来详细讲解一下“最详细的SQL注入相关的命令整理 (转)”这篇文章的内容。 首先,本文主要介绍了SQL注入的基本原理和各种相应的攻击命令。其中包括了常见的注入语句如SELECT、UNION SELECT、ORDER BY、GROUP BY等等。除此之外,还介绍了一些高级的注入技巧如使用MySQL函数来进行注入、利用注入获取管理员密码等等。并且,文章还提供了大…

    database 2023年5月21日
    00
  • golang MySQL实现对数据库表存储获取操作示例

    下面是关于”golang MySQL实现对数据库表存储获取操作示例”的详细讲解。 环境准备 要使用Golang与MySQL进行交互,需要安装以下软件:* Golang* MySQL 安装MySQL驱动 在Go中,使用第三方连接MySQL的库,最常使用的是go-sql-driver/mysql,所以需要安装这个驱动。可以在终端中执行如下命令来安装: go ge…

    database 2023年5月22日
    00
  • nodejs操作mysql实现增删改查的实例

    下面是详细的讲解“Node.js操作MySQL实现增删改查的实例”的完整攻略。 1.安装必要的模块 要使用Node.js操作MySQL,需要安装node.js的mysql模块。可以使用npm安装: npm install mysql 2.连接MySQL数据库 在连接MySQL之前,需要先安装并启动MySQL数据库,同时还需要在MySQL中创建数据库和数据表。…

    database 2023年5月19日
    00
  • 彻底杀掉redis挖矿程序及其守护进程wnTKYg

    今天又遇到了一件烦心的事,前几天刚解决服务器内存跑满的问题,今天又碰到了神奇而又久违的redis挖矿程序。 查询了一下挖矿,就是有人借助redis漏洞借用别人的服务器进行挖矿。 上次做电子商城项目时,开发过程中环境用的阿里云服务器,中途碰到了俄罗斯的ip成功黑了我的服务器,好在文件访问权限有限制,对方仅给我home目录加了密。后来,实在担心留有其它隐藏程序,…

    Redis 2023年4月11日
    00
  • Sybase ASE数据库的常见问题解答

    Sybase ASE数据库的常见问题解答 什么是Sybase ASE数据库? Sybase ASE数据库(Adaptive Server Enterprise)是一种可扩展的关系型数据库管理系统,用于处理商业、金融和信息服务等领域的数据处理需求。它适用于各种规模的企业,包括中小型企业和大型企业。 常见问题解答 1. 如何创建数据库? 使用以下语句创建一个名为…

    database 2023年5月19日
    00
  • MySQL组合索引(多列索引)使用与优化案例详解

    MySQL组合索引(多列索引)使用与优化案例详解 什么是MySQL组合索引 MySQL组合索引也叫做多列索引,它是将多个列作为一个索引键来创建的索引。与单列索引相比,组合索引可以提高多列匹配查询的性能,同时也可以减少索引数量对数据库性能的影响。 创建组合索引的语法如下: CREATE INDEX index_name ON table_name (colum…

    database 2023年5月19日
    00
  • MySQL全文索引、联合索引、like查询、json查询速度哪个快

    MySQL的索引是数据库优化中的重要部分,可以大幅提升查询速度。本篇文章主要讲解MySQL中的全文索引、联合索引、like查询和json查询的速度比较,并提供两个示例来说明。 1. MySQL全文索引 MySQL中的全文索引是指对于文本数据类型(如char、varchar、text等)的字段建立索引。全文索引可以进行全文搜索,提高查询效率。在MySQL中,全…

    database 2023年5月22日
    00
合作推广
合作推广
分享本页
返回顶部