为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】: dmv8
【操作系统】:kylinv10
【CPU】: kunpeng
【问题描述】*: 目前生产的机器配置挺高的(64c256g),一个单表现在不到400w数据,每年新增估计不到300w。目前高频使用的地方由于系统设计问题,没啥优化空间,只能上索引先保证用户使用体验。 目前看大概这个表数据不到2g,建了8个索引。想问询这块有什么阈值建议吗? 读多写少目前。
索引越少越好。
1、根据数据过滤性,索引创建优先级:主键>唯一索引>组合索引。。。
2、根据业务情况,能创建组合索引,就减少单列索引。
3、定期分析慢SQL,根据SQL执行情况合理创建索引。
监控下索引的使用频率,把无效的删掉,或者建成组合索引
开启对索引的监控
ALTER INDEX IDX_EM_ENAME MONITORING USAGE;
查询是否在使用
SELECT INDEX_NAME, TABLE_NAME, USED, START_MONITORING
FROM SYS.V$OBJECT_USAGE;
关闭监控
ALTER INDEX IDX_EM_ENAME NOMONITORING USAGE;
批量对索引的监控
begin
for rs in(
select 'alter index ' || owner || '.' || index_name || ' monitoring usage;' as exec_sql
from SYS.DBA_INDEXES
where INDEX_TYPE = 'NORMAL' -- 只监控普通索引(二级索引)
and owner = 'SYSDBA' -- 替换成你要监控的实际模式名
)
loop
execute immediate rs.exec_sql; -- 自动执行生成的SQL,批量开启监控
end loop;
end;
/
把 monitoring usage 换成 nomonitoring usage,就可以批量关闭监控
按照标准开发规范,组合索引的键值个数不多于5个,单表的索引个数不超过7个。但你说你的系统是读多写少的场景该阈值可以适当放宽,放宽俩三个可以的。

索引也不是越多越好,有些索引可组合起来建组合索引,根据业务SQL去看一下执行计划,若几个字段都在使用,而且频率很高的话,建议可以考虑组合索引。
另外重复的索引建议精简