mysql小表驱动大表

摘要:
小表驱动大表为了减少匹配时的数据量
判断谁做小表时,是比较算上过滤条件后的数量
left join时右表过滤条件在where,优化器会转为inner join小表驱动大表。
left join时右表过滤条件在on,优化器不会优化成小表驱动大表,因为无法转为inner join
inner join时优化器会自动小表驱动大表

course–100条数据
student_info–100w条数据
优化器会选择小表驱动大表(这里表指的是结果集)
EXPLAIN SELECT a.*,b.* FROM coursea JOINstudent_info b ON a.course_id=b.course_id``
mysql小表驱动大表_第1张图片
加上过滤student_info的条件

EXPLAIN
SELECT a.*,b.* FROM `course` a JOIN `student_info` b ON a.`course_id`=b.`course_id` WHERE b.`student_id`=1

执行计划改变,由小表student_info驱动大表course,得出优化器先走where后join的结论。
在这里插入图片描述
论证:查看优化器执行(只截取from后的内容)

from atguigudb1.course a join atguigudb1.student_info b where ((atguigudb1.a.course_id = atguigudb1.b.course_id) and (atguigudb1.b.student_id = 1))

你可能感兴趣的:(mysql,数据库)