`

Sql Server 索引使用情况及优化的相关 Sql

 
阅读更多
--Begin Index(索引) 分析优化的相关 Sql 

-- 返回当前数据库所有碎片率大于25%的索引
-- 运行本语句会扫描很多数据页面
-- 避免在系统负载比较高时运行
-- 避免在系统负载比较高时运行
declare @dbid int
select @dbid = db_id()
SELECT o.name as tablename,s.* FROM sys.dm_db_index_physical_stats (@dbid, NULL, NULL, NULL, NULL) s,sys.objects o
where avg_fragmentation_in_percent>25 and o.object_id =s.object_id
order by avg_fragmentation_in_percent desc
GO

-- 当前数据库可能缺少的索引
-- 非常好用的 Sql 语句
select d.*
        , s.avg_total_user_cost
        , s.avg_user_impact
        , s.last_user_seek
        ,s.unique_compiles
from sys.dm_db_missing_index_group_stats s
        ,sys.dm_db_missing_index_groups g
        ,sys.dm_db_missing_index_details d
where s.group_handle = g.index_group_handle
and d.index_handle = g.index_handle
order by s.avg_user_impact desc
go

-- 自动重建或重新组织索引
-- 比较好用,慎用,特别是对于在线 DB
-- Ensure a USE <databasename> statement has been executed first.
SET NOCOUNT ON;
DECLARE @objectid int;
DECLARE @indexid int;
DECLARE @partitioncount bigint;
DECLARE @schemaname nvarchar(130); 
DECLARE @objectname nvarchar(130); 
DECLARE @indexname nvarchar(130); 
DECLARE @partitionnum bigint;
DECLARE @partitions bigint;
DECLARE @frag float;
DECLARE @command nvarchar(4000); 
-- Conditionally select tables and indexes from the sys.dm_db_index_physical_stats function 
-- and convert object and index IDs to names.
SELECT
    object_id AS objectid,
    index_id AS indexid,
    partition_number AS partitionnum,
    avg_fragmentation_in_percent AS frag
INTO #work_to_do
FROM sys.dm_db_index_physical_stats (DB_ID(), NULL, NULL , NULL, 'LIMITED')
WHERE avg_fragmentation_in_percent > 10.0 AND index_id > 0;

-- Declare the cursor for the list of partitions to be processed.
DECLARE partitions CURSOR FOR SELECT * FROM #work_to_do;

-- Open the cursor.
OPEN partitions;

-- Loop through the partitions.
WHILE (1=1)
    BEGIN;
        FETCH NEXT
           FROM partitions
           INTO @objectid, @indexid, @partitionnum, @frag;
        IF @@FETCH_STATUS < 0 BREAK;
        SELECT @objectname = QUOTENAME(o.name), @schemaname = QUOTENAME(s.name)
        FROM sys.objects AS o
        JOIN sys.schemas as s ON s.schema_id = o.schema_id
        WHERE o.object_id = @objectid;
        SELECT @indexname = QUOTENAME(name)
        FROM sys.indexes
        WHERE  object_id = @objectid AND index_id = @indexid;
        SELECT @partitioncount = count (*)
        FROM sys.partitions
        WHERE object_id = @objectid AND index_id = @indexid;

-- 30 is an arbitrary decision point at which to switch between reorganizing and rebuilding.
        IF @frag < 30.0
            SET @command = N'ALTER INDEX ' + @indexname + N' ON ' + @schemaname + N'.' + @objectname + N' REORGANIZE';
        IF @frag >= 30.0
            SET @command = N'ALTER INDEX ' + @indexname + N' ON ' + @schemaname + N'.' + @objectname + N' REBUILD';
        IF @partitioncount > 1
            SET @command = @command + N' PARTITION=' + CAST(@partitionnum AS nvarchar(10));
        EXEC (@command);
        PRINT N'Executed: ' + @command;
    END;

-- Close and deallocate the cursor.
CLOSE partitions;
DEALLOCATE partitions;

-- Drop the temporary table.
DROP TABLE #work_to_do;
GO


-- 查看当前数据库索引的使用率
-- 非常的有用
SELECT
object_name(object_id) as table_name,
(
select name
from sys.indexes
where object_id = stats.object_id and index_id = stats.index_id
) as index_name,
*
FROM sys.dm_db_index_usage_stats as stats
WHERE database_id = DB_ID()
order by table_name

-- 指定表的索引使用情况
declare @table as nvarchar(100)
set @table = 't_name';

SELECT
(
  select name
  from sys.indexes
  where object_id = stats.object_id and index_id = stats.index_id
) as index_name,
*
FROM sys.dm_db_index_usage_stats as stats
where object_id = object_id(@table)
order by user_seeks, user_scans, user_lookups asc

--End Index 分析优化的相关 Sql 
 

备注:sys.dm_exec_sql_text只能在master数据库中正常使用,不知什么原因。

分享到:
评论

相关推荐

    SqlServer 数据库索引优化详解

    深入理解SqlServer索引机制及合理优化数据库

    SQL Server 索引结构及其使用(聚集索引与非聚集索引)

    "SQL Server 索引结构及其使用(聚集索引与非聚集索引)" 数据库索引是数据库性能优化的关键技术之一。SQL Server 提供了两种索引:聚集索引(clustered index)和非聚集索引(nonclustered index)。本文将详细介绍...

    优化SQL Server索引的小技巧

    在本文中,我们将讨论如何用 SQL Server 的工具来优化数据库索引的使用,并涉及到有关索引的一般性知识。 索引的类型主要有两种:clustered 索引和 nonclustered 索引。在建立索引时,需要考虑数据类型和保存这些...

    SQL Server 索引中include的魅力(具有包含性列的索引)

    SQL Server 索引中 include 的魅力(具有包含性列的索引) SQL Server 索引中 include 的魅力(具有包含性列的索引)是指在非聚集索引中添加非键列,以扩展索引的功能,提高查询性能。通过将非键列添加到非聚集索引...

    SQL Server 2000完结篇系列之七:SQL Server 2000索引优化详解

    在SQL Server 2000中,索引是数据库性能优化的关键组成部分,它极大地影响了数据查询的速度。本文将深入探讨SQL Server 2000中的索引优化,旨在帮助数据库管理员和开发人员理解如何有效地利用索引来提升系统性能。 ...

    SqlServer索引工作原理

    SqlServer索引工作原理 在了解SqlServer索引工作原理之前,我们需要了解...SqlServer索引工作原理是数据库性能优化的关键所在。通过了解索引的工作原理,我们可以更好地设计和优化数据库,提高数据查询的速度和效率。

    V1.0-sqlServer索引使用总结.docx

    SQL Server 索引使用总结 本文档总结了 SQL ...索引是 SQL Server 中的一种重要优化工具,通过合理的索引使用,可以提高查询速度和效率。但是,索引的使用也需要注意一些重要的事项,例如索引的创建、删除和维护。

    SQL Server索引视图及性能提高简介

    在SQL Server 2000中,引入了索引视图的概念,使得视图不仅可以作为数据的安全访问机制和逻辑展示方式,还可以通过创建唯一群集索引和非群集索引来优化查询效率。 传统的视图在运行时会被临时实体化,即每次查询...

    sqlserver管理索引优化SQL语句

    sqlserver管理索引优化SQL语句

    SQL Server的全文索引及优化.pdf

    优化过程中需要考虑全文索引的存储和管理方式,这些索引存储在SQL Server外部,大部分的全文查询处理由MSSearch完成。因此,如何合理配置和使用MSSearch是优化全文索引性能的关键。 在全文索引的组件结构中,关系...

    SqlServer性能优化高效索引指南.pdf

    Sql Server性能优化高效索引指南 Sql Server性能优化高效索引指南是指在Sql Server数据库中,通过合理地设计和优化索引来提高数据库性能的一系列指南和最佳实践。本指南涵盖了索引的基本概念、索引的类型、索引的...

    SQLServer 索引查询优化指南

    **SQLServer索引查询优化指南** SQLServer是一个广泛使用的数据库管理系统,尤其在企业级应用中,性能优化至关重要。本指南将深入探讨SQLServer中的索引原理及其对查询优化的影响。索引是数据库性能的关键因素,它...

    SQLServer索引碎片和解决方法

    SQLServer的维护计划向导可以帮助设置定期的索引优化任务,确保数据库性能的稳定。同时,合理设计索引,如避免过多的小字段索引,以及选择适合业务场景的索引类型(如聚集索引和非聚集索引),也能有效预防碎片的...

    sqlserver索引表设计数据类型选择

    该ppt详细描述sqlserver索引优化时带来的查询性能提升和更新锁开销,最后介绍表设计,字段数据类型的选择及使用适当的冗余减少表连接

    SQL Server 索引结构及其使用

    "SQL Server 索引结构及其使用" SQL Server 索引结构是一种特殊的目录,分为聚集索引和非聚集索引两种。聚集索引是一种按照一定规则排列的目录,正文内容本身就是一种目录,例如汉语字典的正文部分。非聚集索引是一...

    SQLServer视图及索引的创建及使用

    资源名称:SQL Server 视图及索引的创建及使用内容简介: 本文档主要讲述的是SQL Server 视图及索引的创建及使用;目的是通过企业管理器和Transact_SQL语句对视图进行创建、修改和删除通过企业管理器。希望本文档会给...

    SqlServer重建索引

    用于SqlServer的索引重建,全语句实现,可根据实际情况进行部分关键表的索引重建。

    Sybase SQL Server索引的使用和优化.pdf

    Sybase SQL Server索引的使用和优化 Sybase SQL Server索引是提高数据库查询速度的重要方法之一。在良好的数据库设计基础上,能有效地使用索引是SQL Server取得高性能的基础。索引可以避免全表扫描,从而提高查询...

    数据库SQLSERVER索引

    我在这里只讨论两种SQLServer索引,即clustered索引和nonclustered索引。当考察建立什么类型的索引时,你应当考虑数据类型和保存这些数据的column。同样,你也必须考虑数据库可能用到的查询类型以及使用的最为频繁的...

Global site tag (gtag.js) - Google Analytics