在 Query Analyser 中运行上面两句,查看 Excution Plan 可以看出:第一条查询使用了 Inner Join ,而第二条使用了 Outer Join ,显然第一条的查询效率高。其实第一条等价于:
select A.col1,B.col2 from A inner join B on A.col1 = B.col1其实第二条等价于:
select A.col1,B.col2 from A left outer join B on A.col1 = B.col1

解决方案 »

  1.   

    1 looks better , why not try it in query analyzer ? (CTRL+L to check the performance )
      

  2.   

    “2的效率极差,相当于执行一次A表的查询,每查一条记录,就要去b表中遍历一次
    还是用表连接吧”我并不这样认为, SQL Server 的查询优化器非常聪明,会自动把这样的查询转换成 outer join ,上面两个查询,都只需要两次 Table Scan ,唯一的区别是,第二种查询使用 outer join ,会引入多余的 NULL 记录而降低效率。其实,如果数据两不大的话,两中查询在 Query Analyser 中运行时间几乎是一样的。
      

  3.   

    cdshelf(cdshelf)
    这两种语句我以前比较过,差很多
    几千条数据就明显btw:数据量不大,要数据库干甚?
      

  4.   

    严重同意 cdshelf(cdshelf) 的发言
      

  5.   

    thanks a lot,
    有时间我再看看数据库的实现原理