select * from tb,tb2 where tb.name=tb2.name and tb.name='a'
下面是执行计划,
select<----nested loops/inner join<-----table scan(tb)  
                                  <-----table scan(tb2)  
执行时,是不是 table scan(tb)和table scan(tb2)各自扫描一行,然后在nested loops/inner join匹配一次,然后再返回到table scan,这样循环,直到两个表都都扫描完。

解决方案 »

  1.   

    不是的tb用条件tb.name='a' 表扫描,得出结果集
    tb2用条件tb2.name='a' 表扫描,得出结果集
    然后用tb.name=tb2.name 内连接
    再select字段
      

  2.   

    基本是的如果name列有索引的话,那就是index seek
      

  3.   

    这里第二步的条件tb2.name='a'是查询优化器自动加上去的
      

  4.   

    nested loops/inner join 执行的是嵌套循环,外层输入每一行去匹配内层,当然name有索引的话,执行定位到a,没索引所以是table scan
      

  5.   

    tb
    name val
    a    1
    a    2
    a    3 
    b    1
    b    2
    b    3
    select (select max(val) from tb where name = a.name) from tb a
    能说一下这句的执行过程吗?
    子查询得到的是几条数据?
    a    3
    b    3
    这两条数据吗?
    还是六条
    a    3
    a    3
    a    3
    b    3
    b    3
    b    3
      

  6.   

    当然是6条啊,你又没group by