在实践中ORACLE数据库SQL语句走INDEX SKIP SCAN(索引)会引发性能问题。
通常相关指标为SQL语句不得走INDEX SKIP SCAN。
一个复合索引即使在一次查询中没有使用前导字段,也可能通过“索引跳跃式扫描”被有效引用(比如有两个字段id,name;我们只使用了name这个字段作为索引,而没有使用id,这样也可以通过索引跳跃式扫描)。
索引首字段选择性不高,且索引首字段不在查询条件中时,执行计划可能会走INDEX SKIP SCAN导致性能问题:
1. 资源消耗:由于跳过了索引的部分列值,查询会需要更多的CPU和内存资源来执行,这可能导致系统负载增加并降低查询性能。
2. 延迟:由于查询需要访问更多的数据块,索引跳跃扫描可能会增加查询的响应时间。
3. 读取效率下降:跳过索引的部分列值会导致查询需要读取更多的数据块,从而增加了IO操作,降低了读取效率。
4. 存储空间需求增加:由于每个索引条目都需要存储额外的跳跃信息,因此索引跳跃扫描可能会增加索引占用的存储空间。
解决办法:
1、选择合适的索引首字段。建立符合索引时分析数据分布,优先将具有更高分散度的值作为先导列。
2、查询尽量使用索引先导列开始查询,控制查询条件,无法使用先导索引的情况,建立新的索引适配查询。
更多内容请关注公众号“测试小号等闲之辈”~