MySQL优化器算法与执行计划
1.简单嵌套查询算法-SNLJ
1.1 算法介绍
simple nested-loop join 简单嵌套查询算法(SNLJ)
外表(驱动表)中的每一条记录与内表(被驱动表)中的记录进行比较判断(就是个笛卡尔积)。对于两表联接来说,驱动表只会被访问一遍,但被驱动表却要被访问到好多遍,被驱动表的具体访问次数取决于对驱动表执行单表查询后的结果集中的记录条数。
1.2 伪代码
伪代码(类似两层for循环)
for each row r in R do
for each row s in S do
if r and s satisfy the join condition
then output the tuple <r,s>
1.2 开销成本
查询成本:SnRn
其中R表为外部表(Outer Table),S表为内部表(Inner Table)。这是一个最简单的算法,这个算法的开销其实非常大。假设在两张表R和S上进行联接的列都不含有索引,外表的记录数为RN,内表的记录数位SN。根据上一节对于Join算法的评判标准来看,SNLJ的开销如下表所示: