Ну, с первого взгляда у вас есть декартово объединение в вас самое большее внутренний test1 запрос
FROM
table_ethnicities te,
table_companies tc
WHERE 1=1
Затем у вас есть второе объединение ласкать между запросами table_identifiers и test1 .
FROM
table_identifiers id,(
...
) test1
GROUP BY test1.test1)
Так что это потенциальная причина низкой производительности этого запроса.
Для решения проблемы в запросе test1 я предлагаю использовать оператор UNION ALL, например:
(SELECT test1.test1,
COUNT(DISTINCT id.personid)
FROM
table_identifiers id,
(SELECT DISTINCT te.ethnicities AS test1
FROM table_ethnicities te
WHERE :P_COLUMN = 1
UNION ALL
SELECT DISTINCT tc.companyname
FROM table_companies tc
WHERE :P_COLUMN = 2
) test1
GROUP BY test1.test1)
Чтобы исправить второе декартово соединение, вы должны добавить условие соединения.