我有两个查询,我想了解哪个在性能和内存方面更好。我也欢迎这两个的其他选择。
查询一:
SELECT DISTINCT a.no,
a.id1 ,
a.id2
FROM tbl_b b ,
tbl_a a ,
tbl_c c ,
tbl_d d
WHERE (
b.id1 = a.id1
AND a.id1 = c.id1
AND upper(c.flag) = 'Y'
AND c.id1 = d.id1
)
OR (
b.id2 = a.id2
AND a.id2 = c.id2
AND upper(c.flag) = 'Y'
AND c.id2 = d.id2
)
AND d.id3 = 10
这里表 b 和 d 是运行超过 500,000 到数百万行的非常大的表,而表 a 相对较小。
我的要求是只从表 a 中提取那些 id(id1 或 id2)在 b、c、d 表中可用的记录,同时满足某些其他条件。
我手头的备用查询是
查询 2:
SELECT DISTINCT a.no,
a.id1 ,
a.id2
FROM tbl_a a
where exists ( select a.id1, a.id2 from
tbl_c c where ((a.id1 = c.id1 or a.id2 = c.id2)
AND upper(c.active_flag) = 'Y'))
and exists ( select a.id1, a.id2 from
tbl_b b where b.id1 = a.id1 or b.id2 = a.id2)
and exists ( select a.id1, a.id2 from tbl_d d
where (a.id1 = d.id1 or a.id2 = d.id2)
AND d.id3 = 10)
哪个性能最好?我知道查询 2 占用的空间比查询 1 少。但是如何选择最好的呢?