Page 294 - 《软件学报》2026年第1期
P. 294

何家豪 等: 智能查询优化算法研究综述                                                              291


                 则集的优化更加灵活, 并且与端到端的计划生成方法相比, 它更简便、收敛速度更快, 且极少出现“尾部灾难”现象.
                    Bao  对传统优化器的辅助和指导可以理解为通过使用“提示”指导传统优化器进行优化. 这样的方式需要首先
                 构造出一个可以对计划生成过程产生影响的“提示集”, 然后再从“提示集”中为每条到来的查询选择适当的“提示”
                 对传统优化器进行指导. 之后的          DeepO [40] 在此基础上, 又将“提示集”推广到了连接顺序上, 并且还提供了带有置信
                 度的输出以供用户更加清晰地认知到其辅助和指导的过程.
                    随着“提示集”的规模逐渐扩大, 研究者们发现如何为每一条查询确定一个合理的“提示集”探索空间成为一个
                 新的问题. 比如在微软的       SCOPE  系统中有多达     256  条这样可开关的规则, 而且很多规则之间还存在依赖关系, 如
                 果为每一条查询都去枚举         2 256  的数量级的规则开关组合的“提示”, 然后再找出最优的提示集是不现实的                    [5] . 所以
                 FASTgres [93] 和  SCOPE  的研究者就提出了对查询进行分组, 在每一个组内定制一个相对小一点的“提示集”, 然后
                 对组内的查询就只用在其组所对应的“提示集”内进行枚举的思路. 区别在于                       SCOPE  采取的分组策略是根据“提示”
                 对查询计划产生影响的特性将查询分组, 每组查询通过启用或禁用相应的“提示集”的子集, 能够产生不同的查询
                 计划, 而无需考虑与组不相关的“提示”; FASTgres 则是依据参与连接的表和连接谓词作为分类依据将输入的查询
                 语句进行分组, 基于这种分组, 系统再进一步提取各组查询的谓词作为特征, 针对每个特定的查询组独立训练一个
                 专用的小型机器学习模型输出其相应的“提示”.
                    除了利用分组的思想限制“提示”的搜索空间之外, 研究者们还在实验过程中发现了“提示”的两个特点.
                    (1) 对于一条查询有提升的“提示”的子集也是有提升的“提示”.
                    (2) 一般有提升的“提示”的规模不会太大           (不超过  4).
                    所以探索“提示”是一个同时具有贪心选择性质和最优子结构的问题, AutoSteer                    [94] 便从这个角度出发, 提出了
                 一种贪心算法, 即: 在探索过程中如果发现单独关闭规则                 R 1 和规则  R 2 都有提升, 那么下一步 AutoSteer 就会探索
                 同时关闭规则     R 1 和规则  R 2 的“提示”. AutoSteer 会按照这样的方式探索, 直到最优规则集无法再进一步拓展为止.
                 AutoSteer 通过这样的方式也一样可以有效地限制“提示”的搜索空间.
                    图  6  概括了使用“提示”对传统优化器进行辅助和指导的方法的发展流程.

                                               将 “提示集” 拓展到连接顺序上

                                                                       DeepO
                                 首个使用 “提示” 的方法    利用分组限制     根据生效的 “提示” 分组
                                                 “提示” 搜索空间                        SCOPE
                                      Bao
                                                             根据涉及的表和谓词分组
                                                                                 FASTgres
                                                 利用贪心算法限制
                                                  “提示” 搜索空间
                                                                      AutoSteer
                                   图 6 使用“提示”对传统优化器进行辅助和指导的方法的发展流程

                  4.2.2    通过其他方式辅助和指导传统优化器进行计划生成
                    ● 在主流算法大多在考虑使用传统优化器中规则的开关作为“提示”时, Lero                    [65,66] 选择将“增大或缩小传统优化
                                n
                 器中的基数估计      10 倍”作为“提示”. 对于单条查询而言, 这样修改基数估计的“提示”虽然不一定完全精准, 但是根
                 据排序学习    (第  2.4  节) 的思想, 对于即使不是完全正确的“提示”, 只要对其枚举出的候选计划之间的相对关系判
                 断是正确的, 就依然可以选择出最优计划. 所以              Lero  在使用了这样的“提示”之后又使用了一个成对             (pairwise) 的

                 代价模型去从枚举出的计划中选择最优的.
                    ● FOSS [95] 则放弃了在传统优化器开始优化之前就去进行“提示”的做法, 而是在传统优化器生成计划之后去
                 再进行修补. 每一次的修补涉及一次连接方式、扫描方式的选择或是一次连接顺序的调整等. 这样的做法也有效
                 地达到了不亚于在优化之前进行“提示”的方法的效果, 为辅助和指导传统优化器提供了新思路.
   289   290   291   292   293   294   295   296   297   298   299