关联查询优化:

情况一:左外连接

情况二:内连接

内连接中若只能有一个字段有索引,则被驱动表的字段有索引成本较低

对于内连接中,在两个表的连接条件都存在索引的情况下,会选择数据少的表作为驱动表(小表驱动大表)

均没有索引也符合 小表驱动大表的规则

总结:

小的结果集驱动大的结果集(过滤之后的表的行数*每行的大小,并不是表中的总数据)

为被驱动表匹配的条件增加索引(减少内层表的循环匹配次数)

增大join buffer size的大小(一次缓存的数据越多,那么内层包的扫描的次数就越少)

减少驱动表不必要的字段的查询(字段越少,join buffer 缓存的数据就越多)

MySQL8.0新特性:废弃了之前的BNLJ 加入hash join且默认使用

1646391675179.png