基数估计(Cardinality Estimation,CE)在优化关系数据库查询性能中占据着举足轻重的地位。它涉及精准预测数据库查询将返回的中间结果数量,这一预测直接指引着查询优化器选择最优的执行计划。精确的基数估计对于优化连接顺序、决策是否应用索引以及挑选最佳连接方法具有决定性作用,进而影响查询执行时间和整体数据库性能。反之,不准确的基数估计则可能导致选择低效的执行计划,使性能大幅下降,有时甚至相差几个数量级。因此,基数估计成为数据库管理中的核心环节,吸引了大量研究聚焦于提升其准确性和效率。
然而,当前的基数估计方法面临诸多限制。传统CE技术,作为现代数据库系统的主流,依赖于启发式算法和简化模型,如假设数据均匀分布和列间独立。尽管这些方法计算高效,但在处理涉及多表、多过滤器的复杂查询时,往往难以保证预测的准确性。为此,基于学习的基数估计模型应运而生,它们采用数据驱动的方法,力图提供更精准的预测结果。然而,这些新兴模型在实际应用中仍面临高训练成本、对大规模数据集的依赖以及缺乏系统性基准评估等挑战。
为了弥补这一不足,传统基于启发式的方法已开始与利用数据中特定特征的学习模型相结合。尽管学习模型能够提升预测准确性,但其训练过程通常耗资巨大,如基于工作负载的方法需运行海量查询以收集真实基数数据,导致计算开销激增。近年来,数据驱动的方法试图在不实际执行查询的情况下,对表内及表间的数据分布进行建模,虽有所成效,但仍需面对数据变动时的再训练问题。此外,全面基准的缺失也使得模型间的比较及泛化能力评估变得困难重重。
为解决上述问题,Google公司的研究人员推出了CardBench基准测试,旨在构建一个专为学习基数估计模型设计的系统评估框架。CardBench以其全面性著称,涵盖了来自20个不同实际数据库的数千个查询,远超以往任何基准测试。这一设计使得在不同条件下对学习CE模型进行全面评估成为可能。CardBench支持三种关键模型设置:基于实例的模型(在单一数据集上训练)、零样本模型(在多个数据集上预训练后测试于未见数据集)以及微调模型(预训练后利用目标数据集少量数据进行微调)。
CardBench不仅提供了丰富的数据集,还配备了计算必要数据统计、生成真实SQL查询及创建带注释查询图等工具,以辅助CE模型的训练。其训练数据集分为两部分:一部分针对具有多个过滤条件的单表查询,另一部分则针对涉及两表的二元连接查询。通过这些精心设计的9125个单表查询和8454个二元连接查询,CardBench构建了一个既稳健又具挑战性的模型评估环境。尤为值得一提的是,这些数据的标签来自Google BigQuery,其获取过程耗费了七个CPU年的查询执行时间,彰显了创建该基准测试的巨大投入。
利用CardBench进行的性能评估展现出了令人鼓舞的结果,特别是微调模型表现突出。零样本模型在处理涉及连接的复杂查询时准确性较低,而微调模型则能在使用较少训练数据的情况下,达到与基于实例模型相当的准确性。例如,经过微调的图神经网络(GNN)模型在二元连接查询中的中位数q误差仅为1.32,95th百分位数q误差为120,显著优于零样本模型。此外,研究还表明,微调预训练模型即便在仅有500个查询的有限训练数据下,也能显著提升性能,这为实际应用中训练数据可能受限的情况提供了切实可行的解决方案。
综上所述,CardBench标志着学习基数估计领域的一项重大进展。通过提供全面且多样化的基准测试平台,CardBench不仅促进了不同CE模型之间的系统评估与比较,更为该关键领域的持续创新奠定了坚实基础。特别地,对微调模型的支持,进一步降低了模型训练成本,为实际应用中的性能优化开辟了新途径。