删除无用索引是数据库性能优化的重要环节。无用索引会占用存储空间、降低写入(INSERT/UPDATE/DELETE)性能,并增加维护成本。以下是通用方法和主流数据库(MySQL、PostgreSQL、Oracle、SQL Server)的具体操作指南。
在删除之前,必须先确认索引确实没被使用:
查看索引使用统计
sys.schema_unused_indexes 或 performance_schema.table_io_waits_summary_by_index_usagepg_stat_user_indexes(idx_scan = 0)V$OBJECT_USAGE 或 AWR 报告sys.dm_db_index_usage_stats(user_seeks + user_scans + user_lookups = 0)观察周期
排除特殊索引
-- 查看未使用索引
SELECT * FROM sys.schema_unused_indexes;
-- 删除索引
ALTER TABLE 表名 DROP INDEX 索引名;
-- 或
DROP INDEX 索引名 ON 表名;
-- 查看索引扫描次数
SELECT indexrelname, idx_scan
FROM pg_stat_user_indexes
WHERE idx_scan = 0;
-- 删除索引
DROP INDEX 索引名;
-- 开启监控
ALTER INDEX 索引名 MONITORING USAGE;
-- 查看是否使用
SELECT * FROM V$OBJECT_USAGE;
-- 删除索引
DROP INDEX 索引名;
-- 查看使用统计
SELECT *
FROM sys.dm_db_index_usage_stats
WHERE object_id = OBJECT_ID('表名');
-- 删除索引
DROP INDEX 索引名 ON 表名;
先禁用而非直接删除
ALTER INDEX ... DISABLE在低峰期操作
备份与记录
SHOW CREATE TABLE 表名; -- MySQL
自动化工具
使用次数 = 0 且非关键索引如果你能提供具体数据库类型和版本,我可以给你更精确的命令和注意事项。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。