你把A上的索引drop掉,再试试看。两个的意思也不太一样吧,第一个可能会出现比B更多的记录数。

解决方案 »

  1.   

    exists语句可以代替in语句来提高带子查询的查询语句,像你这样的用法大可不必。在两张表做关联时,要将返回记录少的表作为驱动表,即写在from子句的最后,注意,是返回记录少的表,不是记录少的表。
      

  2.   

    当两表没有关联,a表依靠b表记录作条件,这样会用到
    SELECT A.ID FROM A
    WHERE EXISITS(SELECT * FROM B
    WHERE B.NAME LIKE 'AA%')
      

  3.   

    返回记录的多少,由你的where条件决定,你自己判断一下,就知道哪张表返回记录最少了,将其放在from子句的最后,当然了,这种将返回记录最少的表作为驱动表的优化方法只和基于RBO方式的优化模式有关。