Итак, у меня в настоящее время есть довольно большая таблица, которую мне нужно часто запрашивать. Эта таблица содержит много столбцов и строк, и мне нужно фильтровать строки на основе 2-х списков, которые размещаются в 2-х виртуальных таблиц, и я хочу результаты, которые соответствуют либо один из нихКакой метод использовать: UNION of JOINS vs LEFT JOINS
Я m делать процедуру для получения результатов, но наша среда разработки не имеет достаточного объема выборки для проверки производительности процедуры. Итак, теперь у меня есть 2 варианта.
Используйте
LEFT JOINS
, чтобы сделать что-то вроде этогоSELECT GT.* FROM GiantTable GT LEFT JOIN List1 L1 ON GT.X = L1.X LEFT JOIN List2 L2 ON GT.Y = L2.Y WHERE L1.X IS NOT NULL OR L2.Y IS NOT NULL
Используйте 2
JOIN
запросов иUNION
результатыSELECT GT.* FROM GiantTable GT JOIN List1 L1 ON GT.X = L1.X UNION SELECT GT.* FROM GiantTable GT JOIN List2 L2 ON GT.Y = L1.Y
Я уверен, что второй должен владеть намного лучше, но я хотел бы знать, ошибаюсь ли я
@Jerrad как я уже говорил в этом вопросе «наша среда разработки не хватает размер выборки, чтобы проверить производительность процедуры », и я не являюсь экспертом в инструментах анализа Oracle. – JSantos
Что вы узнали, когда вы googled свой титул? – philipxy
Ваш 1 возвращает разные строки, чем ваш 2. По-видимому, нужные вам строки являются единственными в союзе. Ваш текст довольно неряшлив, но, создавая «фильтр» GT для строк, «которые соответствуют одному из них», мы получаем объединение. Я понимаю, что вы говорите «что-то вроде» re 1, но тогда бессмысленно сравнивать свое время с ответами, возвращающими те же строки, что и 2. Индексы PS имеют большое значение. У вас есть они на GT X & Y? Вы говорите, что Li - это взгляды, и что именно вы имеете в виду, когда говорите, что X & Y - это ПК? Просто, что они уникальны? Знает ли СУБД, когда стоит комбинированный запрос? – philipxy