图中平常的explain计划结果中如果没有明显的Index Scan或Index Only Scan看不出来是否走索引,分布式数据库需要set enable_fast_query=off设置会话级别的参数修改再执行explain查看计划可以看出(设置为on,表示执行计划在cn和dn上各自生成,off表示在分布式框架中执行计划在cn上生成然后发送到dn上执行)。判断是否走索引:如果执行计划结果包含Index Scan或Index Only Scan,表示命中索引;如果显示Seq Scan(全表扫描,包含on table),则未命中索引。
查询优化器开关
enable_fast_query_shipping 是 GaussDB 数据库的一个参数,用于控制查询优化器是否使用分布式框架生成执行计划。该参数的取值直接影响查询执行策略和性能优化方式。
参数功能
on:执行计划在协调节点(CN)和数据节点(DN)各自生成,适用于可完全下推至 DN 执行的查询,能更高效利用分布式集群性能。
但是调试时看不到具体的执行计划。
off:执行计划由 CN 生成后下发至 DN 执行,适用于需要 CN 进一步处理结果的复杂查询(如含聚合、排序等操作)。
但是调试时可以具体的执行计划。
设置方式
通过 SQL 命令动态调整参数值,以下为会话级别的参数设置方式
默认值与建议
默认值为 on,适用于简单查询或可完全下推的场景。若查询包含聚合(agg)、窗口函数(window function)、排序(sort)、限制(limit/offset)等操作,可能无法下推,需调整为 off。
注意事项
关闭该参数可能导致查询效率下降,尤其是涉及多节点数据交互的复杂查询。建议根据具体查询类型和性能测试结果调整。
通过Explain查看SQL是否命中索引
如果执行计划结果显示 Index Scan 或 Index Only Scan,表示命中索引;
如果执行计划结果显示 Seq Scan(全表扫描,包含on table) ,则未命中索引。
命中索引场景:筛选条件为索引字段,查询字段为索引字段
筛选字段的顺序不影响是否命中索引,这一点和mysql的最左原则不同
未命中索引场景:筛选条件为索引字段,查询字段为全表字段
未命中索引场景:筛选条件为非索引字段,查询字段为索引字段