У меня есть два запроса, и я хочу понять, что лучше с точки зрения производительности и памяти. Я также приветствую другие альтернативы для этих двух.
Запрос 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
Здесь таблицы b и d — это очень большие таблицы, содержащие от 500 000 до миллионов строк, тогда как таблица a относительно меньше.
Мое требование состоит в том, чтобы выбрать только те записи из таблицы 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)
Что лучше с точки зрения производительности? Я понимаю, что второй запрос занимает меньше места, чем первый. Но как выбрать лучший?