首页 > 代码库 > MySQL源码 优化器
MySQL源码 优化器
完成了sql的解析过程后,开始进入优化器:
调用的流程分为:
mysql_select:
JOIN::prepare:
JOIN::optimize:
JOIN::exec:
prepare过程:
组装各个组件,包括:stepup tables, fields, condition, order
1. tables:
setup_tables_and_check_access:从table_list中检查访问权限,并加入到leaf_tables中,增加tables计数。
setup_tables&&check_single_table_access
2. setup_fields
setup_wild:如果使用了*,这个地方要解开成字段。
setup_wild:如果使用了*,这个地方要解开成字段。
find_field_in_tables:查找字段是否存在表中
把item生成成field。
3. setup_without_group
setup_conds:处理where条件,检索conds中的字段
setup_order:处理order子句,检索order中的字段
setup_group:处理group子句,检索group中的字段
optimize过程:
1. simplify_joins:所有的外连接更改为内连接。
2. build_bitmap_for_nested_joins:为嵌套的join查询建立一个bitmap。
3. optimize_cond:优化where条件
remove_eq_conds:删除等价的条件
4. prune_partitions:分区修剪,这里只是分区表的处理,非分区表不做处理
5. make_join_statistics:
table->file->stats.records;检索引擎上对表的统计信息,
table->s->keys:获取table_share对象上这个表的所有key。
update_ref_and_keys:获取索引信息
choose_plan:
optimize_straight_join:
find_best:
greedy_search:
optimize_straight_join:
find_best:
greedy_search:
exec的过程:
1. do_select:分解join
2. sub_select: Retrieve records
3. evaluate_join_record:
下一篇开始进行一些实验:
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。