删除无用的数据库索引,通常需要先识别、再评估、最后安全删除。下面按常见数据库(MySQL / PostgreSQL / SQL Server)给你一套通用做法和命令示例。
-- 查看索引使用情况(需开启 performance_schema)
SELECT
object_schema,
object_name,
index_name,
COUNT_FETCH
FROM performance_schema.table_io_waits_summary_by_index_usage
WHERE index_name IS NOT NULL
AND COUNT_FETCH = 0;
-- pg_stat_user_indexes
SELECT
schemaname,
relname,
indexrelname,
idx_scan
FROM pg_stat_user_indexes
WHERE idx_scan = 0;
SELECT
OBJECT_NAME(i.object_id) AS table_name,
i.name AS index_name,
s.user_seeks,
s.user_scans,
s.user_lookups
FROM sys.indexes i
JOIN sys.dm_db_index_usage_stats s
ON i.object_id = s.object_id AND i.index_id = s.index_id
WHERE s.user_seeks + s.user_scans + s.user_lookups = 0;
⚠️ 注意:刚重建或新建的库可能数据不准确,建议观察 至少 1–2 个业务周期。
例如:
(a)(a, b)(a) include (b)后两者可能使前者冗余。
可借助工具:
pt-duplicate-key-checkerpt-duplicate-key-checker --user=xxx --password=xxx
手动分析 pg_index 或使用 pg_stat_statements 辅助判断。
删除索引前确认:
建议:
ALTER TABLE table_name DROP INDEX index_name;
DROP INDEX index_name;
-- 或
DROP INDEX CONCURRENTLY index_name; -- 不锁表(推荐)
DROP INDEX index_name ON table_name;
使用次数 = 0 的索引ORDER BY / GROUP BY如果你告诉我:
我可以帮你写一套可直接执行的检测 + 删除脚本。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。