有两张表:A表人员信息表,B表业务表,两张表通过身份证号关联。A表里面身份证号已建立索引,以下两种SQL,哪种执行效率更好:
注:A表有2000万数据,B表只有3万条数据
1、select A.xm from A ,B where A.SFZH=B.SFZH;
2、select (select A.xm from A where A.SFZH=B.SFZH)XM from B;
以上两种,哪个效率更高,效率更高的原因是什么,麻烦你们详细分析分析。

解决方案 »

  1.   

    (8) SELECT (9) DISTINCT (11) <TOP_specification> <select_list>
    (1) FROM <left_table>
    (3) <join_type> JOIN <right_table>
    (2) ON <join_condition>
    (4) WHERE <where_condition>
    (5) GROUP BY <group_by_list>
    (6) WITH {CUBE | ROLLUP}
    (7) HAVING <having_condition>
    (10) ORDER BY <order_by_list> 上面给出的事Oracle执行sql语句的顺序,LZ可以自己分析一下
    另外,不适用子查询应该会好一点
      

  2.   

    具体得看执行计划。查询1:大数据的时候,该查询的执行计划会走Hash Join,Hash Join操作是:分别扫描表A,B一次,然后进行Hash连接。查询2:该查询是相关子查询,就是说外部表查询一行,子查询执行一次,在这个SQL中,表B有3w条记录,那么扫描表A的次数=3w次,尽管子查询会走索引,但是扫描3w次效率是很低的。所以查询1效率更高。
      

  3.   

    hudingchen分析的很有道理,谢谢!