Mysql优化_第十三篇(HashJoin篇)
1 适用场景
纯等值查询,不能使用索引
从MYSQL 8.0.18开始,MYSQL实现了对于相等条件下的HASHJOIN,并且,join条件中无法使用任何索引,比如下面的语句:
SELECT *
FROM t1
JOIN t2
ON t1.c1=t2.c1;
等值查询,使用到索引
当然,如果有一个或者多个索引可以适用于单表谓词,hash join也可以使用到。(这句话不是很懂?原句为:A hash join can also be used when there are one or more indexes that can be used for single-table predicates.
相对于Blocked Nested Loop Algorithm,以下简称BNL,hash join性能更高,并且两者的使用场景相同,所以从8.0.20开始,BNL已经被移除。使用hash join替代之。
通常在EXPLAIN的结果里面,在Extra列,会有如下描述:
Extra: Using where; Using join buffer (hash join)
说明使用到了hash join。
多个join条件中至少包含一个等值查询(可以包含非等值)
虽然hash join适用于等值join,但是,从原则上来讲,在多个join条件中,只要有每对join条件中,至少存在一个等值,Mysql就可以使用到hash join来提升速度&#