###### 基于外连接查询的一点优化建议:
为什么大厂工程师不让在连接查询中让查询 * ,只让查询自己想要得到的列,这个问题基于查询成本的优化:在mysql中innodb情况下我们在使用left jion 外连接查询表结构的时候,比如 select * table1 left join table2 on 1.条件1 =2.条件2 where 1.条件3 ,这个时候我们 table1 作为 驱动表 table2作为被驱动表;
在上面条件情况下 ,这个时候mysql会把table1 表全部查询出来 然后 在条件3下面查询所有table1的数据集做为结果集和on后面 条件关联起来 然后关联查询table2的结果,在这个过程中mysql会把表中table1查询结果集加载进入内存中,然后把被驱动表的记录做匹配,假如结果集有两条记录那么就是查询两次被驱动表,因为内存有限,假如被驱动表很大,被驱动表就要被多次io加载进入内存中,加大性能消耗和时间长,mysql设立了一个概率,join buffer ,会把驱动表table1先查询的结果集先加载进入join buffer 中,然后批量和被驱动表查询对比,但是join buffer 默认大小是256kb ,当时是第一次的查询结果越小越好,超过256kb的就要多次查询驱动表,这就是为什么要在外连接查询中一定要尽量少的驱动表的列查询出来,避免使用*