У меня есть 2 таблицы Person_Organization
и Person_Organization_other
, а вложенный запрос:
SELECT
Person_Organization_id
FROM
Person_Organization_other
WHERE
company_name IN (SELECT company_name
FROM Person_Organization_other
WHERE Person_Organization_id IN (SELECT Person_Organization_Id
FROM Person_Organization
WHERE person_id = 117
AND delete_flag = 0)
)
Принимая во внимание, что соответствующий запрос вышеупомянутого запроса с соединением, который я пробовал: -
SELECT
poo.Person_Organization_id
FROM
Person_Organization_other poo, Person_Organization_other poo1, Person_Organization po
WHERE
poo1.Person_Organization_id = po.Person_Organization_Id
AND po.person_id = 117
AND po.delete_flag = 0
AND poo.company_name = poo1.company_name
GROUP BY
poo.Person_Organization_id
Однако выясняется, что вложенный запрос занимает меньше времени по сравнению с соответствующим запросом с объединениями. Я использовал трассировку SQL Profiler для сравнения времени выполнения запросов. Для вложенного запроса это заняло 30 с лишним мс. Для объединенного запроса потребовалось 41 нечетное мс
У меня сложилось впечатление, что, как правило, вложенные запросы менее перфоманны и их следует "выравнивать" с помощью объединений.
Может кто-нибудь объяснить, что я делаю не так?
С уважением
Нитин