Page 286 - 《软件学报》2026年第1期
P. 286
何家豪 等: 智能查询优化算法研究综述 283
现较差, 模型性能下降时一般只能采用重新训练的方式适应新的环境.
2.3 数据和查询驱动的代价估计模型
研究发现, 单纯的数据驱动或查询驱动都无法达到理想的效果, 所以结合了二者的方法逐步出现. 这类方法会
先将查询的特征和数据的特征 (统计直方图、样本位图等) 一起整合进行编码为某种向量, 然后将其作为后续模
型的输入进行回归预测其代价. 这样的方法比数据驱动的方法更加轻便, 比查询驱动的方法更加具有适应性.
2.3.1 特征编码
早期的特征编码会直接将一条查询编码成一个向量 [35] . 后来为了使得代价模型可以更深入地理解查询的树
状结构, 后来的特征编码会将一条查询编码为结构较为复杂的张量. 对于一条查询而言, 可以编码的特征有: 分类
型特征、数值型特征和谓词型特征.
● 分类型特征: 分类型特征是查询中最常见的特征. 查询中涉及的表名, 列名以及操作符类型都属于分类型特
征. 这一类型的特征在编码时往往采用独热编码的方式. 然而这样的方式有几点不足: 一是在编码时就需要确定每
一类特征会出现的所有情况, 导致后续拓展性较差 (比如有新的表, 或表中有新的列出现); 二是独热编码的向量维
度比较高, 有效信息分布比较稀疏. 一些方法针对这一不足进行了改进, 如 QueryFormer [36] 中会为分类型变量的独
热编码额外进行一次嵌入操作, 将高维稀疏的独热编码向量映射到低维稠密的嵌入向量中; ALECE [37] 则采用了一
种特殊的二进制编码, 将表名特征编码的空间复杂度压缩到了 O(log 2 n).
● 数值型特征: 数值型特征包括传统优化器给出的预测值 (基数估计、代价估计和 IO 次数), 结点在查询计划
中的高度等. 一般对于数值型特征的编码方式比较简单, 大多采用直接拼接或正则化后拼接在对应特征向量尾部
的方式.
● 谓词型特征: 谓词型特征指在查询中出现的筛选条件, 形式一般为<列名, 关系运算符, 值>的三元组. 对于谓
词的编码固然可以简单地将其中出现的条件运算符和列名当作分类型特征, 被判断的数值作为数值型特征来处
理 [38] . 但是考虑到谓词对于扫描算子和部分连接算子的基数估计而言至关重要, 许多方法对于谓词的编码做了特
别的改进. 比如文献 [39−41] 中对谓词的编码采用了自然语言处理中的词嵌入技术, 将不同的谓词编码成了固定长
度的嵌入向量. 这样的编码可以使得相似的筛选条件在高位嵌入空间中依然是相近的, 同时可以兼容所有类型的筛
选, 包括字符串的 LIKE 条件和 IN 的判断, 但是它们没有考虑到数据分布的特征. 所以又有一些方法比如 Robust-
MSCN [42] , CEDA [43] 等, 就会一并将样本位图、统计直方图等信息通过一些预先的筛选或自注意力机制进行编码,
整合到整体查询的编码之中. 这样的编码方式一定程度上反映了数据分布的特征, 实现了查询和数据的统一建模.
值得注意的是, 对于上述提到的诸多可编码的特征, 在实际运用中并非编码的越多, 使用的编码方式越复杂越
好, 而是需要在不同的目标场景下进行灵活的运用. 比如当代价模型的目标只是降低代价估计的误差时, 将更多的
统计信息进行编码可能会更有效; 而当代价模型运用于计划生成问题上时, 使用传统数据库的预测值可能更加重
要. 对于一些任务而言, 选择正确的编码特征和编码方式甚至比选择正确的模型架构更加重要 [14] .
2.3.2 模型架构
以特征编码得到的张量为输入, 预测的代价值为输出的机器学习模型有很多种. 例如使用支持向量机作为代
价估计模型的文献 [44], 利用核典型相关分析模型作为代价估计模型的文献 [34,45], 以及构建了运算符级的回归
树模型的代价估计模型的文献 [46]. 然而, 相比于较为简单的机器学习模型, 深度学习模型可以学习到更复杂的数
据特征, 在近期的研究中也更受到研究者们的青睐. 本节将主要关注用于进行代价估计的深度学习模型, 其中包
括 Tree-RNN [47] 、Tree-LSTM [48] 、Tree-CNN [49] 和 Attention-based [50] 的方法.
● Tree-RNN (tree-structured recursive neural network): RNN [51] 一般用于一维线性结构的输入, 所以研究者们为
了对树状的查询计划编码输入使用 RNN, 对其进行了结构上的改进. RNN 会用节点的状态来表示模型学习到的
信息, 对于一维线性结构的简单 RNN 而言, 第 i 个节点的状态一般仅取决于第 i–1 个节点的状态. 即 H i =f(W i–1 H i–1
+B i ), 其中 f 为激活函数, W i– 为第 i 个节点位置模型学习到的参数, H i 为第 i 个节点的状态, B i 为模型对第 i 个节
1
点位置学习到偏置值. 但对于树状结构 (Tree-RNN) 而言, 一个节点的状态需要同时考虑其左右子节点的状态, 即

