数据仓库服务 GAUSSDB(DWS)-降低IO的处理方案:场景4:无索引、有索引不走

时间:2024-11-28 20:10:35

场景4:无索引、有索引不走

某一次点查询,Seq Scan扫描需要3767ms,因涉及从4096000条数据中获取8240条数据,符合索引扫描的场景(海量数据中寻找少量数据),在对过滤条件列增加索引后,计划依然是Seq Scan而没有走Index Scan。

对目标表ANALYZE后,计划能够自动选择索引,性能从3s+优化到2ms+,极大降低IO消耗。

常见场景:行存大表的查询场景,从大量数据中访问极少数据,没走索引扫描而是走顺序扫描,导致IO效率低,不走索引常见有两种情况:

  • 过滤条件列上没建索引。
  • 有索引但是计划没选索引扫描。

触发因素

  • 常用过滤条件列没有建索引。
  • 表中数据因执行DML操作后产生数据变化未及时ANALYZE,导致优化器无法选择索引扫描计划,ANALYZE介绍参见ANALYZE

处理方式

  1. 对行存表常用过滤列增加索引,索引基本设计原则:

    • 索引列选择distinct值多,且常用于过滤条件,过滤条件多时可以考虑建组合索引,组合索引中distinct值多的列排在前面,索引个数不宜超过3个。
    • 大量数据带索引导入会产生大量IO,如果该表涉及大量数据导入,需严格控制索引个数,建议导入前先将索引删除,导入完成后再重新建索引。

  2. 对频繁做DML操作的表,业务中加入及时ANALYZE,主要场景:

    • 表数据从无到有。
    • 表频繁进行INSERT/UPDATE/DELETE。
    • 表数据即插即用,需要立即访问且只访问刚插入的数据。

support.huaweicloud.com/trouble-dws/dws_09_0111.html