2

情况是我必须加入 10 多个不同的表。在 SQL 中,我加入同一个表 5 次。查询看起来像这样。

select * from 
Tab1
join Tab2 on Tab1.x = Tab2.x
.
.
.
join Tab10 t10 on
t10.x = 'xx' and 
t10.y = 'yy' and
t10.z = 'zz' 

join Tab10 t11 on
t11.x = 'aa' and 
t11.y = 'bb' and
t11.z = 'cc' 

join Tab10 t12 on
t12.x = 'dd' and 
t12.y = 'ee' and
t12.z = 'ff' 

join Tab10 t13 on
t13.x = 'gg' and 
t13.y = 'hh' and
t13.z = 'ii' 

join Tab10 t14 on
t14.x = 'jj' and 
t14.y = 'kk' and
t14.z = 'll' 

这个 Tab10 加入 5 次的原因是根据参数得到不同的值。是否可以以更好的方式重写 Tab10 连接?我还注意到由于这个 Tab10 加入,性能很差。

4

3 回答 3

1

您不需要加入 5 次,or改为使用。

.
.
.
join Tab10 t10 on 
(t10.x = 'xx' and t10.y = 'yy' and t10.z = 'zz') or  
(t10.x = 'aa' and t10.y = 'bb' and t10.z = 'cc') or 
(t10.x = 'dd' and t10.y = 'ee' and t10.z = 'ff') or ...
于 2011-10-14T07:49:53.557 回答
0

有几个连接并不一定意味着性能不佳。使用您在联接中使用的三个字段为 Tab10 表创建一个索引。

不要使用select *,这会降低性能。您将获取大量不使用的数据。

于 2011-10-14T07:35:30.043 回答
0

有时 asubselect比 a 更有效,left outer join你应该记住的一件事是在where子句过滤器中按更严格的第一个。正如 Guffa 所说,添加索引是一个好点。但请记住,如果您在一个远writes多于读取的表中添加索引,则该表可能会减慢速度updates/insert

于 2011-10-14T07:41:40.117 回答