select from t1,t2 where t1.x1 = xxx and* t1.x2 = t2.x2 and t2.x3 = xxx;

嵌套循环关联

假设有两个表要一起执行关联,此时会先在一个驱动表里根据他的where筛选条件找出一波 数据,比如说找出10条数据吧。
就对这10条数据走一个循环,用每条数据都到另外一个被驱动表里去根据ON连接条件和 WHERE里的被驱动表筛选条件去查找数据,找出来的数据就进行关联。
依次类推,假设驱动表里找出来10条数据,那么就要到被驱动表里去查询10次!
那么如果是三个表进行关联呢?那就更夸张了,你从表1里查出来10条数据,接着去表2里查10次,假 设每次都查出来3条数据,然后关联起来,此时你会得到一个30条数据的结果集,接着再用这批数据去表3里去继续查询30次!
image.png

问题: 往从驱动表里查出来一波数据之后,要对每一条数据都循环一次去被驱动表里查询数据。那万一被驱动表的索引没有建好,那不是每次都全表扫描吗? 好不容易从驱动表里扫出来一波数据,接着又来一个for循环一条一条去被驱动表里根据 ON连接条件和WHERE筛选条件去查

通常而言,针对多表查询的语句,我们要尽量给两个表都加上索引,索引要确保从驱动表里查 询也是通过索引去查找,接着对被驱动表查询也通过索引去查找。如果能做到这一点,你的多表关联语 句性能就会很高!