欢迎来到MySQL实战第83篇,修炼500篇,学习需要一步一的一个脚印。
![35162fb7456b74f2a659f5c8f6a8be13.png](https://i-blog.csdnimg.cn/blog_migrate/b9414df1276b76ade854eaf329f5f081.jpeg)
【背景介绍】
经过了分析器,MySQL就知道了查询任务是什么了?在开始执行之前,需要先经过优化器的处理。
在表里面有多个索引的时候,决定使用哪个索引;或者在一个语句有多个表关联的时候,决定各个表的连接顺序(join)。
【案例分析】
![68d7392310582b7cd0bc8ad3a2f3c42a.png](https://i-blog.csdnimg.cn/blog_migrate/6a16d70dbe504afdc63e22e29d430219.jpeg)
比如我们执行上面的两个语句,这个语句是执行两个表的join:
<1>既可以先从表fruits里面取出s_id=101的记录的s_id值,在根据s_id值关联到表suppliers.s_id,在判断suppliers.s_zip=30000;
<2>先从表suppliers里面取出s_zip=30000d的记录的s_id值,再根据s_id值关联到fruits再判断fruits里面的s_id的值是否等于101
![2bd4a002b5911a0e12bbd205531453a2.png](https://i-blog.csdnimg.cn/blog_migrate/f4c2db2b086513a74ce06a6a50b9402f.jpeg)
这两种方案的从逻辑上来讲是一样的,但是执行的效率确不相同。而优化器的本领就是决定使用哪个方案。
优化器阶段完成后,也就是说选择了执行的方案,下面就开始进入动手阶段(执行)了。
![efeddc24155edab811a8198e22079c0c.png](https://i-blog.csdnimg.cn/blog_migrate/601a4efe22e510d9a75e9491955b2ee2.jpeg)
求关注,让我们一起修炼吧!MySQL是我们的选择!