基于动态规划的优化器

Posted 数据库备忘录

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于动态规划的优化器相关的知识,希望对你有一定的参考价值。

我们已经做了以下这三个专题




论文:Access Path Selection in a Relational Database Management System

出处:vldb79


近期的文章,我们会对数据库的优化器展开一个专题。


这篇论文是第一个关系型数据库IBM System R的优化器实现细节。优化器的输入是之前parser输出的AST语法树。输出是可以执行的物理执行计划。


单表扫描:关系表扫描是一个很重要的sql执行算子,我们具体扫描时是按照顺序扫描还是采用某个索引进行扫描? 


两表JOIN:A join B时,是采用什么种类的join方案?nested-loop join,hash join,index join,sort-merge join等等。 


多表JOIN:多个表join时,谁先谁后有个顺序问题,这是一个NP难的问题(假设n个表join,join顺序则有O(n!)种)。如此多的join方案中选取一种执行代价最优的方案是一个很难的算法问题。

bombehub,公众号:数据库系统原理


优化器同时需要结合“Database Catalog”内的数据,对查询的代价进行估计。这部分数据在中文中有很多叫法:数据字典、元数据、系统表等。

基于动态规划的优化器




数据结构


下面两幅图展示了一个4路join的sql语句所对应的graph结构。

基于动态规划的优化器

基于动态规划的优化器




动态规划算法的例子

以system r为代表的很多优化器都采用的是动态规划的算法。主要步骤是依次从小到大,枚举出所有的物理执行计划,从中根据估计的代价选择最优的计划。


步骤1:针对每个关系表,枚举出所有物理计划,然后剪枝得到每个关系表的最优物理计划。

基于动态规划的优化器

基于动态规划的优化器

基于动态规划的优化器


步骤2:根据单表的最优计划,枚举出两表join的计划,并计算出代价最优的两两join的物理计划。

基于动态规划的优化器

基于动态规划的优化器


步骤3:枚举并得到3表join的计划,并剪枝得到最优三表join的物理计划

基于动态规划的优化器


依此类推,得到4张表的最优物理join计划。


敲黑板:上述表格一共有(2^4-1=15)行。


基于动态规划的优化器


树形表述


上述用表格表述的步骤,用原型图表示过程如下:


枚举所有两两join的case

基于动态规划的优化器


基于代价剪枝

基于动态规划的优化器



基于两两join的结果,枚举所有三表join的case

基于动态规划的优化器


基于代价剪枝

继续基于代价剪枝


参考资料:

  1. https://bigdata.uni-saarland.de/datenbankenlernen/14516original.pdf

  2. https://www.youtube.com/watch?v=zcdfPb92pvs&list=PLC4UZxBVGKtcZgLCrIUenuano53pbPpf1&index=6

  3. https://bigdata.uni-saarland.de/datenbankenlernen/

  4. https://15721.courses.cs.cmu.edu/spring2020/slides/19-optimizer1.pdf

  5. http://db.in.tum.de/teaching/ws1819/queryopt/slides/chapter3.pdf?lang=en

以上是关于基于动态规划的优化器的主要内容,如果未能解决你的问题,请参考以下文章

动态规划之空间优化与总结回顾

小烨收藏动态规划和贪心算法比较

基于连通性状态压缩的动态规划问题

盖世大学堂丨基于动态规划的混合动力能量管理策略优化提升

优博聚焦 华中科技大学帅航:基于近似动态规划(ADP)的微电网日内在线优化运行方法研究

pascal 动态规划