У меня есть два запроса, и я хочу понять, что лучше с точки зрения производительности и памяти. Я также приветствую другие альтернативы для этих двух.Производительность и память Oracle
Запрос 1:
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
Здесь столы б, г очень большие таблицы работает более 500000 до миллионов строк, а в таблице а является относительно меньше.
Мое требование состоит в том, чтобы забрать только те записи из таблицы a, идентификатор которых (либо 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)
Что лучше производительность мудрым? Я понимаю, что запрос два занимает меньшее пространство, чем запрос 1. Но как выбрать лучший?
Привет, Тони, моя ошибка, которая была .. Я пропустил парантез. Теперь я обновил запрос, это ((a или b) и c) в моем состоянии. – 2009-07-15 12:59:45
ОК, я удалил свои комментарии о круглых скобках. Теперь я счастлив, что два запроса логически эквивалентны. –
+1, всегда старайтесь, когда это возможно. – DCookie