mysql中的表连接分为三种
1. 左连接 left join
左连接以左表为基础,查询出左表所有数据并且去匹配右表的数据,如果右表没
有数据,则为空
2. 右连接 right join
右连接以右表为基础,查询出右表所有数据并且去匹配左表的数据,如果左表没
有数据,则为空
3. 内连接 inner join
内连接会把左右表匹配的数据查询出来,不存在的数据直接忽略
驱动表与被驱动表的概念
驱动表是表连接中的基础表,也就是通过驱动表的数据结果集作为循环基础数据,然后一条一条的通过这个结果集的数据作为过滤条件到被驱动表中查询数据,然后合并
驱动与被驱动
左连接中 左表是驱动表,右表是被驱动表
右连接中 右表是驱动表,左表是被驱动表
内连接中 表数据量较小的表会由mysql自动选择作为驱动表去驱动大表
有一个重点是,如果where条件存在的话 mysql会根据where实际条件进行驱动表的选择
sql优化中,一个比较重要的点就是要用小表驱动大表
原因
mysql表关联的算法,是通过驱动表去循环被驱动表,比如说,20w的大表和200条的小表,如果大表驱动,那么是20w条记录外循环,内循环200条去连接查找,需要通过20w次连接,如果小表驱动,那么是200条记录外循环,内循环20w条去连接查找,只需要通过200次连接就可以了,并且驱动表是不会使用索引的