下面两个查询,哪个效率高些?
一个是先连接后再筛选,一个是筛选后再连接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
一个是先连接后再筛选,一个是筛选后再连接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
如果 a,b 表 数据记录不超过1W 两种情况的效率差不多少。
如果 两表中的数据记录超过10W 第二种要快些。由于查找范围小经很多哟!
set statistics time on
set statistics time off
--可以查询到sql执行所需的时间
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可以用执行计划看看两种的实际计划对比下。