下面两个查询,哪个效率高些?
一个是先连接后再筛选,一个是筛选后再连接select * from
a inner join b
on a.pk=b.fk
where b.xx='值'
-------------------------------------------------------
select * from
a inner join (select * from b where b.xx='值') bb
on a.pk=bb.fk

解决方案 »

  1.   

    要分情况而论,、
    如果 a,b 表 数据记录不超过1W 两种情况的效率差不多少。
    如果 两表中的数据记录超过10W 第二种要快些。由于查找范围小经很多哟!
      

  2.   


    set statistics time on
    set statistics time off
    --可以查询到sql执行所需的时间
      

  3.   

    笑死我拉对于inner join来说2种写法完全一样拿第一种来说。。你以为是先匹配on在筛选where的吗? 你错了where 如果只对一张表的数据进行筛选。。是会在on之前执行的这是优化器那么你会干的事。。只有当类似where a.col+b.col=....这样的筛选时。才会在on之后执行。。
      

  4.   

    第二种快一点,但是如果第一种写成select * from
    a inner join b
    on a.pk=b.fk AND b.xx='值'就应该一样了,没区别了。具体原因和SQLServer的执行语句顺序有关系,如下--SQL查询语句的执行过程
    --1.FROM
    --2.ON
    --3.OUTER(JOIN)
    --**The first three steps will do time by time until all tables involve in FROM dealed with
    --4.WHERE
    --5.GROUP BY
    --6.CUBE|ROLLUP
    --7.HAVING
    --8.SELECT
    --9.DISTINCT
    --10.ORDER BY
    --11.TOP修改后的两种在SQL Server优化后应该是相同的执行计划,LZ可以用执行计划看看两种的实际计划对比下。
      

  5.   

    哪怕是outer join也是一样的
      

  6.   

    别误导别人。。outer join是完全不一样的。。举个例子where a.col is null
      

  7.   

    数据量大的情况下,第二种快很多。用ERP的2万多的数据测试过。