关联查询优化:
情况一:左外连接
情况二:内连接
内连接中若只能有一个字段有索引,则被驱动表的字段有索引成本较低
对于内连接中,在两个表的连接条件都存在索引的情况下,会选择数据少的表作为驱动表(小表驱动大表)
均没有索引也符合 小表驱动大表的规则
总结:
小的结果集驱动大的结果集(过滤之后的表的行数*每行的大小,并不是表中的总数据)
为被驱动表匹配的条件增加索引(减少内层表的循环匹配次数)
增大join buffer size的大小(一次缓存的数据越多,那么内层包的扫描的次数就越少)
减少驱动表不必要的字段的查询(字段越少,join buffer 缓存的数据就越多)
MySQL8.0新特性:废弃了之前的BNLJ 加入hash join且默认使用