首页 > 其他分享 >索引缺失和索引碎片

索引缺失和索引碎片

时间:2023-03-27 15:58:02浏览次数:33  
标签:index name 碎片 索引 user id avg 缺失 columns

 

 

SELECT
       [database_name]=db.[name]
, [table_name] = REVERSE(SUBSTRING(REVERSE(statement), 2, (CHARINDEX('[', REVERSE(statement), 2)) - 2))
, [index_creation_statement]='CREATE NONCLUSTERED INDEX [MI_'+ CONVERT (VARCHAR, g.Index_Group_Handle) + '_'+ CONVERT (VARCHAR, g.Index_Handle) + '_' + LEFT(PARSENAME(REVERSE(SUBSTRING(REVERSE(statement), 2, (CHARINDEX('[', REVERSE(statement), 2)) - 2)), 1), 32) + ']' + ' ON ['+db.[name]+'].[dbo].['+REVERSE(SUBSTRING(REVERSE(statement), 2, (CHARINDEX('[', REVERSE(statement), 2)) - 2)) + '] (' + ISNULL(equality_columns, '') + CASE WHEN equality_columns IS NOT NULL AND inequality_columns IS NOT NULL THEN ',' ELSE '' END + ISNULL(inequality_columns, '') + ')' + ISNULL(' INCLUDE (' + included_columns + ')', '')
, [improvement_measure]=s.avg_total_user_cost * (avg_user_impact / 100.0) * s.user_seeks
, [total_cost]  = ROUND(avg_total_user_cost * avg_user_impact * (user_seeks + user_scans),0)
, [avg_total_user_cost] =avg_total_user_cost  -- 表示缺失索引被建立后,平均会降低的成本数,这个数据越大,表示索引创建之后,效果越好
, [avg_user_impact]=avg_user_impact       --  表示缺失索引创建以后,平均会降低成本的百分比
, [user_seeks]=s.user_seeks        --  表示从服务器开启到现在,缺失索引可以被用户的语句用于 Seek 操作的次数
, [equality_columns] = equality_columns   --  表示等于操作的字段
, [inequality_columns] = inequality_columns      --  表示非等于操作的字段
, [included_columns] = included_columns   --  表示建立使用 include 关键字添加在索引 叶子节点的字段
, [index_group_handle]=g.[index_group_handle]
, [index_handle]=g.[index_handle]
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
       INNER join sys.databases db
       ON db.database_id=d.database_id
ORDER BY [avg_total_user_cost] DESC;

 

-- 获取数据库索引碎片率大于10% 的索引信息
DECLARE @DB_NAME NVARCHAR(100)=(Select Name From Master..SysDataBases Where DbId=(Select Dbid From Master..SysProcesses Where Spid = @@spid))
 
SELECT i.[name] AS IndexName,
       o.name AS TableName,
       sch.name AS SchemaName,
       s.avg_fragmentation_in_percent,
       'ALTER INDEX [' + i.[name] + '] ON [' + @DB_NAME + '].[' + sch.name + '].[' + o.name
       + '] REBUILD WITH(FILLFACTOR=80, SORT_IN_TEMPDB=ON ,STATISTICS_NORECOMPUTE = ON,ONLINE=OFF)' AS Scripts
FROM sys.dm_db_index_physical_stats(DB_ID(@DB_NAME), NULL, NULL, NULL, NULL) AS s
    INNER JOIN sys.indexes AS i
        ON s.object_id = i.object_id
           AND s.index_id = i.index_id
    INNER JOIN sys.objects AS o
        ON i.object_id = o.object_id
    INNER JOIN sys.schemas AS sch
        ON o.schema_id = sch.schema_id
WHERE s.avg_fragmentation_in_percent > 10
      AND i.name IS NOT NULL
ORDER BY s.avg_fragmentation_in_percent DESC

 

标签:index,name,碎片,索引,user,id,avg,缺失,columns
From: https://www.cnblogs.com/Areas/p/17261787.html

相关文章

  • SQL Server 索引类型及意义
    一、什么是索引拿汉语字典的目录页(索引)打比方:正如汉语字典中的汉字按页存放一样,SQLServer中的数据记录也是按页存放的,每页容量一般为4K。为了加快查找的速度,汉语字(词)典......
  • MySQL联合索引创建规则
    1、索引应该按照最常用于查询的列的顺序创建。这样可以最大程度地提高查询性能。2、如果查询中包含的列与索引中的列顺序不一致,则无法使用索引。因此,如果您有多个查询,每个......
  • lucene4.5源码分析系列:索引缓存以及刷新
    缓存和刷新是比较重要的问题,它涉及到lucene如何管理内存和磁盘。前面提到索引的结果是缓存在内存中的,等到一定时候才会将其刷新到硬盘上去。缓存在这里的目的无非是缓解高速......
  • Lucene 源代码剖析-9索引是如何存储的
    Lucene 源码剖析5           索引是如何存储的  5.1   数据存储类Directory      Directory及相关类负责文档索引的存储。           5......
  • Mysql索引底层数据结构与算法、Explain
    为什么建议InnoDB表必须建主键?并且推荐使用整型的自增主键?如果不由我们人工去创建主键,mysql也会帮我们去建立主键,没有必要把这么简单地工作交给Mysql。整型比较比UUID比......
  • 聊聊索引
    简介MySQL是最流行的关系型数据库之一,索引是MySQL中最重要的性能优化技术之一。通过优化索引可以显著提升查询性能,降低查询的时间复杂度。本文将介绍MySQL索引的类型、不......
  • 索引构建
    背景面向C端用户的在线核心搜索系统底层采用ES作为核心“存储/检索”引擎,搜索作为用户购买决策的核心链路的一部分,对系统的可靠性要求tp9999,对查询性能要求极高(召回+排序......
  • Oracle 创建索引
    创建索引一般分为在线索引和非在线索引,在线与非在线的区别:非在线锁表,优先创建索引,此时DML都被阻塞,所以快;相反,在线锁的是行而非表,通过临时表进行索引的创建,所以不会影响DML......
  • 微服务 初始 分布式搜索引擎 Elastic Search
    文章目录⛄引言一、什么是ElasticSearch?二、ElasticSearch倒排索引⛅正向索引⚡倒排索引⛄正向和倒排三、ES的一些概念⛅文档和字段⚡索引和映射四、MySQL与Elasticsea......
  • d3dcompiler_43.dll缺失的修复方法
    有网友在玩游戏时出现“无法启动程序,因为计算机中丢失d3dcompiler_43.dll。尝试重新安装该程序以解决问题”的提示,那么是什么原因造成丢失d3dcompiler_43.dll呢,缺少d3dcompi......