嵌套的select语句比where语句好吗?

时间:2019-07-03 21:08:36

标签: sql

我想加快查询速度。 我想知道以下查询是否有任何性能差异。

方法1:

select 
   *
from 
   t0, t1
where 
   t0.a = X
   and t0.b = t1.b

方法2:

select 
   * 
from 
   (select * from t0 where t0.a = X) as t0', t1
where
   t0'.b=t1.b;

2 个答案:

答案 0 :(得分:3)

首先应避免使用逗号联接语法:

select    *
from    t0, t1
where    t0.a = X
   and t0.b = t1.b

=>
select    *
from t0
join t1
  on t0.a = X
 and t0.b = t1.b;

第二个现代查询优化器执行谓词下推,因此两个查询都是等效的。

10 Cool SQL Optimisations That do not Depend on the Cost Model by Lukas Eder

答案 1 :(得分:0)

您应将查询写为:

select *
from t0 join
     t1
     on t0.b = t1.b
where t0.a = X;

使用现代的,显式的,标准 JOIN语法不会影响查询的性能。

为了获得更好的性能,您需要在t0(a, b)t1(b)上建立索引。