千家信息网

Sql Server 中怎么优化索引

发表于:2025-11-13 作者:千家信息网编辑
千家信息网最后更新 2025年11月13日,Sql Server 中怎么优化索引,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。代码如下: --Begin Index(索引) 分
千家信息网最后更新 2025年11月13日Sql Server 中怎么优化索引

Sql Server 中怎么优化索引,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

代码如下: --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 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

关于Sql Server 中怎么优化索引问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注行业资讯频道了解更多相关知识。

索引 数据 数据库 问题 分析 运行 更多 系统 语句 好用 帮助 解答 易行 简单易行 代码 使用率 内容 小伙 小伙伴 情况 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 曲靖市网络安全形势通报会 互联网促进文化传播和科技创新 超市小型数据库 刺客信条起源没有了数据库 一个服务器怎么开几个区 软件开发企业会计科目有哪些 金蝶专业版安装那个数据库 阿里轻云服务器安全吗 物化视图远程数据库 领域模型与数据库 网络技术开发交什么税 方舟生存进化服务器服主怎么设置 广西网络安全教育讲座 建立一个学生宿舍管理系统数据库 讯仁网络技术 邯郸系统软件开发哪家实惠 谷歌大神微服务器 巨人网络安全中心 win系统下怎么查看数据库 已接入或拟接入网络安全数据情况 日照网络技术研究 斌易网络技术 删除服务器文件方法 奉贤区国际网络技术服务售后保障 代理服务器要不要启用 深圳电脑软件开发在哪里 就关键词数据库作出检索提 北京曙光服务器维修调试 外汇平台服务器怎么搭建 网络安全进乡村宣传标语
0