在未命中顺序中使用操作是否存在性能问题?
像 1.所有内部连接首先加入所有条件以后的条件。
select * from
t1
inner join t2 on t1.t2Id = t2.Id
inner join t3 on t1.t3Id = t3.Id
inner join t4 on t2.t4Id = t4.Id
where
t1.Id in (1,2,3,4,5)
and t2.Id in (1,2,3,4,5,6,7)
and t3.Name like '%a'
2。所有表格分别在哪里然后内部加入
select * from
(select * from t1 where t1.Id in (1,2,3,4,5)) a
inner join (select * from t2 where t2.Id in (1,2,3,4,5,6,7)) a1 on a.t2Id =
a.Id
inner join (select * from t3 where t3.Name like '%a') a2 on a.t3Id = a2.Id
inner join t4 on a1.t4Id = t4.Id
它可能影响查询性能?
也是条件的顺序?
像
select * from t1
inner join t2 on t1.t2Id = t2.Id
where t1.t2Id in (1,2,3,4,5,6)
and t2.t3Id in (1,2,3,4,5)
答案 0 :(得分:3)
SQL查询在运行时会经历三个阶段:
作为优化的结果,您编写查询的方式通常对性能的影响比您想象的要小。很多人都非常努力地找出优化查询的最佳方法 - 并且可能有许多你甚至都不知道的事情(比如不同的连接算法,连接排序,推迟表达式评估等等) )。
对于您的示例,SQL Server优化程序应生成相同的执行计划。引擎非常聪明,意识到这些引擎确实在做同样的事情。
注意:并非所有查询引擎都适用。有些人的优化程度很差,而且性能会有差异。