于数据库范畴之内优化器技术一直都被看成是极具挑战性的难题它就好像是数据库的“大脑”肩负着把SQL查询转变为最高效执行计划的重大责任。一个优秀的优化器能够直接判定数据库的性能上限可是去设计一个健壮又智能的优化器却得攻克代价估算、计划空间搜索以及统计信息准确性等诸多难关。这些难关包含多个方面代价估算得精准衡量诸多操作的成本计划空间搜索需在海量的可能计划里找出最优解统计信息准确性是保证优化器决策正确的关键基础。每个环节都满是挑战唯有成功越过这些难关方可设计出真正出色的数据库优化器进而提升整个数据库系统的性能表现。优化器为何难做因数据库面对的查询场景丰富多样、千变万化其涵盖从简单单表过滤操作到涉及几十张表的复杂关联情形每一种不同情况都必然需采用各异执行策略。在此种状况下优化器必须在不实际执行所有可能计划的前提条件下迅速寻找到最优解。然而可能的执行计划数量会随表数量增加呈指数级增长态势这就是所谓的“计划爆炸”问题。极其复杂的是数据库的查询场景较为基础的只是其中简单的单表过滤部分更为复杂的是几十张表之间存在的复杂关联。面对这般丰富多样的查询场景不同种类情况对应着不同的执行策略需求。优化器在不实际执行所有可能计划的情形下快速找出最优解决方案并非轻而易举之事。随着表数量的增多可能的执行计划数量会以指数级的速度增长这种现象就是“计划爆炸”问题。代价估算怎么准优化器的核心在于代价估算它承担着预测每个操作像扫描、连接、排序等的CPU以及I/O开销的重要任务。可是数据库中的数据分布常常不遵循均匀分布规律传统基于直方图的统计信息在高维关联场景中极容易出现失真状况。比如当多个过滤条件存在相关性时独立假设会导致估算偏差达到几个数量级。计划搜索如何高效在海量的计划空间面前优化器只能采用剪枝策略。经典方法动态规划当表数量超过十几张时就会力不从心。遗传算法和基于强化学习的新方法能扩展搜索边界却面临收敛不稳定或训练成本过高的问题。在实际生产系统中要在探索质量与编译时间之间进行痛苦的权衡。于实际生产系统里海量计划空间中优化器得运用剪枝策略。经典方法动态规划表数量超十几张时则无法应对。遗传算法及基于强化学习的新方法拓展搜索边界时存在收敛不稳定或者训练成本过高的情况。如此这般还得于探索质量与编译时间间做痛苦权衡。https://gitee.com/zclchenglin/dongfeng01/issues/IIC0NKhttps://gitee.com/zclchenglin/dongfeng01/issues/IIB7MXhttps://gitee.com/zclchenglin/dongfeng01/issues/IIB7JOhttps://gitee.com/zclchenglin/dongfeng01/issues/IIB7DRhttps://gitee.com/zclchenglin/dongfeng01/issues/IIB8MThttps://gitee.com/zclchenglin/dongfeng01/issues/IIB8OMhttps://weibo.com/ttarticle/p/show?id2309405286271857066382https://weibo.com/ttarticle/p/show?id2309405286267989655637https://weibo.com/ttarticle/p/show?id2309405286290345558062