“索引碎片”通常出现在 数据库(如 SQL Server、MySQL、Oracle) 或 搜索引擎/文件索引 场景中。下面以最常见的 数据库索引碎片 为主说明,并补充其他场景。
索引在频繁增删改后,页面会变得不连续、空间利用率下降,导致:
碎片主要分为:
SELECT
OBJECT_NAME(ps.object_id) AS TableName,
i.name AS IndexName,
ps.avg_fragmentation_in_percent
FROM sys.dm_db_index_physical_stats(
DB_ID(), NULL, NULL, NULL, 'LIMITED') ps
JOIN sys.indexes i
ON ps.object_id = i.object_id
AND ps.index_id = i.index_id
WHERE ps.avg_fragmentation_in_percent > 10;
| 碎片率 | 建议操作 |
|---|---|
| < 10% | 一般忽略 |
| 10%–30% | REORGANIZE |
| > 30% | REBUILD |
ALTER INDEX IX_IndexName
ON dbo.TableName
REORGANIZE;
ALTER INDEX IX_IndexName
ON dbo.TableName
REBUILD;
或在线重建(企业版):
REBUILD WITH (ONLINE = ON);
SHOW TABLE STATUS LIKE 'table_name';
关注 Data_free
OPTIMIZE TABLE table_name;
⚠️ 会锁表(InnoDB 实际是重建表)
或从 MySQL 5.7+:
ALTER TABLE table_name ENGINE=InnoDB;
ANALYZE INDEX idx_name VALIDATE STRUCTURE;
SELECT * FROM index_stats;
ALTER INDEX idx_name REBUILD;
-- 在线
ALTER INDEX idx_name REBUILD ONLINE;
_forcemergePOST /index_name/_forcemerge?max_num_segments=1
如果你能说明:
我可以给你更具体的方案和脚本。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。