分享:查询索引碎片SQL调整
SELECT object_name(dt.object_id) Tablename,si.name IndexName,
dt.avg_fragmentation_in_percent AS ExternalFragmentation,
dt.avg_page_space_used_in_percent AS InternalFragmentation FROM
( SELECT object_id,index_id,avg_fragmentation_in_percent,avg_page_space_used_in_percent
FROM sys.dm_db_index_physical_stats (db_id(‘数据库名’),null,null,null,’DETAILED’ )
WHERE index_id <> 0) AS dt INNER JOIN sys.indexes si ON si.object_id=dt.object_id
AND si.index_id=dt.index_id
AND dt.avg_fragmentation_in_percent>10 AND
dt.avg_page_space_used_in_percent<75 ORDER BY avg_fragmentation_in_percent DESC
-------------------------------------------------------
以上SQL,存在一点小问题:
在SQL2008中附加SQL2000数据库,然后执行上面或下面SQL语句,会报错:')' 附近有语法错误。
select object_name([object_id]) 表名,* from sys.dm_db_index_physical_stats(db_id(),null,null,null,null)
请问这是为什么?
(在SQL2008中,直接新建数据库,然后执行上面SQL,是正常的)
--------------------------------------------------
针对上面问题,
本人对最上面的SQL语句做了两次调整,问题解决了,SQL如下:
declare @databaseName varchar(50),@dbid int
set @databaseName='barcodeXuTai'
select @dbid=db_id(@databaseName)
SELECT object_name(dt.object_id) 表名,
si.name 索引名,
dt.avg_fragmentation_in_percent AS 索引外部碎片,
dt.avg_page_space_used_in_percent AS 索引内部碎片
FROM
( SELECT object_id,index_id,avg_fragmentation_in_percent,avg_page_space_used_in_percent
FROM master.sys.dm_db_index_physical_stats(@dbid,null,null,null,'DETAILED')
WHERE index_id <> 0
) AS dt INNER JOIN sys.indexes si ON si.object_id=dt.object_id
AND si.index_id=dt.index_id
AND dt.avg_fragmentation_in_percent>10
AND dt.avg_page_space_used_in_percent<75
ORDER BY avg_fragmentation_in_percent DESC
相关推荐
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
SQL Server查询优化
本文探讨了SQL Server中查询优化的方法,包括理解B+树索引结构,区分聚集和非聚集索引,掌握最左匹配原则,应用覆盖索引减少回表操作,以及处理索引碎片以提高查询性能。
热门数据库SQL优化面试题,解答思路与实践案例详解
本文详细探讨了SQL优化的面试问题,包括如何识别和优化慢查询,分库分表的原则与实践,查询慢SQL的原因及排查方法,以及索引失效的常见场景。通过对实际案例的分析,总结了识别问题、优化策略、数据库设计和配置调整的关键点,旨在提供SQL优化的全面理解和应用指导。
SQL优化实战:从索引策略到EXPLAIN对比的深度解析
本文深入剖析SQL性能优化核心方法,涵盖单列索引、复合索引、覆盖索引等九类索引策略及其适用场景;详解索引失效原因(如函数调用、隐式类型转换、OR条件)及修复方案;逐项解读EXPLAIN的type、Extra等关键字段含义;并通过电商订单、社交消息等真实案例,展示从15秒到50毫秒的极致优化过程,强调ICP、分区表、索引维护等高级实践。
面试时候索引问题回答
面试时候索引问题回答


疑难问题

