从执行计划中可以知道这些信息:
t2是为驱动表,t1是为被驱动表,先执行驱动表(执行计划结果id列值为一样的话,是从上往下进行执行的),mysql底层优化器会优先选择小表作为驱动表,用where条件过滤完驱动表...上面SQL大致执行流程如下
从t2表中读取一行记录(如果t2表有查询过滤条件,会先执行完过滤条件,再从过滤后结果中取一行记录)
从第1步记录中,取出关联字段 a 到 t1表查找
取出 t1表满足条件的记录与...t2中获取到的结果进行合并,将结果放入结果集
循环上3个步骤,直到无法满足条件,将结果集返回给客户端
整个过程会读取t2表所有数据(100行数据),然后遍历每行数据字段a的值,根据t2表中a的值扫描t1...上面SQL大致执行流程如下
从t2表中读取一行记录
从第1步记录中,取出关联字段 a 到 t1表的辅助索引树中进行查找
从t1表中取出辅助索引树中满足条件的记录拿出主键ID到主键索引中根据主键ID将剩下字段的数据取出与...t2中获取到的结果进行合并,将结果放入结果集
循环上三个步骤,直到无法满足条件,将结果集返回给客户端
特点:基于嵌套循环连接算法进行优化,虽然还是双层循环进行匹配数据,但是内层循环(被驱动表)是使用索引树的高度决定循环次数的