开发者社区 问答 正文

FindBestQueryPlan函数的逻辑是什么?

FindBestQueryPlan函数的逻辑是什么?

展开
收起
游客c7gnq4eofxp32 2022-05-07 21:06:00 713 分享 版权
来自: 阿里技术
1 条回答
写回答
取消 提交回答
  • 1.先判断是否属于新优化器可以支持的Query语法(CheckSupportedQuery),不支持的直接返回错误ER_HYPERGRAPH_NOT_SUPPORTED_YET。 2.转化top_join_list变成JoinHypergraph结构。由于Hypergraph是比较独立的算法层面的实现,JoinHypergraph结构用来更好的把数据库的结构包装到Hypergraph的edges和nodes的概念上的。 3.通过EnumerateAllConnectedPartitions实现论文中的DPhyp算法。 CostingReceiver类包含了过去JOIN planning的主要逻辑,包括根据cost选择相应的访问路径,根据DPhyp生成的子计划进行评估,保留cost最小的子计划。 4.得到root_path后,接下来处理group/agg/having/sort/limit的。对于Group by操作,目前Hypergraph使用sorting first + streaming aggregation的方式。

    2022-05-08 10:29:19
    赞同 展开评论
问答地址: