You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MariaDB 10.11迁移至11.0后特定查询性能下降问题排查

低侵入性修复MariaDB 11.0查询执行计划异常方案

1. 强制指定索引(查询级适配)

  • 无需修改原有查询逻辑,给目标查询添加FORCE INDEX提示,指定10.11版本中使用的a表索引。示例:
    SELECT ... FROM a FORCE INDEX (idx_a_filter) JOIN o ON ... WHERE ...;
    
  • 若应用端无法直接修改SQL,可借助MariaDB的查询重写插件实现自动替换,无需改动应用代码:
    INSTALL SONAME 'query_rewrite';
    INSERT INTO query_rewrite.rewrite_rules (original_query, rewritten_query)
    VALUES ('原查询语句', '添加FORCE INDEX后的查询语句');
    FLUSH QUERY REWRITE RULES;
    

2. 调整优化器参数(实例级适配)

  • MariaDB 11.0的优化器成本估算模型可能有调整,可通过以下参数引导优化器倾向索引扫描:
    • 关闭基于成本的全表扫描决策:SET GLOBAL optimizer_switch='table_scan_cost_based=off';(临时生效,需写入my.cnf/my.ini永久生效)
    • 降低索引扫描的成本系数:SET GLOBAL index_merge_sort_intersection_cost=1;(可根据实际查询性能微调)
  • 注意:修改全局参数会影响所有查询,建议先在测试环境验证后再部署到生产。

3. 手动更新表统计信息

  • 尽管执行过mysqlcheck,手动触发统计信息更新可能让优化器重新计算执行计划:
    ANALYZE TABLE a, o;
    
  • 针对大型表,可生成持久化统计信息避免反复计算:
    ANALYZE TABLE a, o PERSISTENT FOR ALL;
    

4. 回退优化器行为(版本兼容)

  • MariaDB 11.0支持通过参数回退到10.11版本的优化器逻辑:
    SET GLOBAL optimizer_switch='old_optimizer=on';
    
  • 该设置会让优化器采用接近旧版本的决策规则,无需修改查询或表结构。

内容的提问来源于stack exchange,提问作者Serhii

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 16:32:11