MySQL查询优化器源码分析--多表连接优化算法之一,optimize_straight_join()按表的指定顺序求解最优查询计划

本文介绍了一个针对数据库查询优化的方法,该方法通过特定的表次序求解单表与局部最优查询树的最优连接,实现对数据库查询性能的有效提升。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

函数功能:

指定的表的次序(循环条件中表示不同表位置的值递增)求解单表s与局部最优查询树的最优连接。

 

代码分析:

static void

optimize_straight_join(JOIN *join, table_map join_tables)

{

……

  for (JOIN_TAB **pos= join->best_ref + idx ; (s= *pos) ; pos++)//遍历remaining_tables中的每个表s

  {

    /* Find the best access method from 's' to the current partial plan */

    best_access_path(join, s, join->thd, join_tables, idx,

                     record_count, read_time);

//通过调用best_access_path函数得到局部查询计划的最优花费保存到“join->positions[idx].records_read”和“join->positions[idx].read_time”,然后计算当前最优花费(best_access_path函数体中的最后,为这2个变量赋值)

 

    /* compute the cost of the new plan extended with 's' */

    record_count*= join->positions[idx].records_read;

    read_time+=    join->positions[idx].read_time;

    join_tables&= ~(s->table->map);

    ++idx; //保障下次调用best_access_path函数时,从本次循环使用的表s的下一个表的位置正确

  }

 

  read_time+= record_count / (double) TIME_FOR_COMPARE;

……

  join->best_read= read_time; //得到本次连接的最优花费

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值