Основная проблема, которую я вижу в вашем запросе, - это крайнее левое соединение между CTMAGENTAUDIT
и подзапросом, содержащим объединение.Проблема с этим подзапросом заключается в том, что, как написано, Oracle не может использовать какой-либо индекс для объединения.Это означает, что Oracle, вероятно, придется прибегнуть к более медленному методу при объединении, возможно, к полному сканированию.
Один из подходов здесь состоит в том, чтобы создать материализованное представление, содержащее запрос объединения, а затем проиндексировать его:
CREATE MATERIALIZED VIEW T2 AS
SELECT NODEID, AGSTAT FROM CMR_NODES@SPDB
UNION ALL
SELECT NODEID, AGSTAT FROM CMR_NODES@DEVDB;
CREATE INDEX mv_node_idx ON T2 (NODEID);
С этим индексированным материализованным представлением я ожидаю, что ваш запрос будет работать намного лучше:
SELECT
CONTROL_M_SERVER,
HOST,
CASE WHEN AGSTAT = 'V' THEN 'Available'
WHEN AGSTAT = 'U' THEN 'Unavailable'
WHEN AGSTAT = 'R' THEN 'Discovering'
ELSE 'Not Defined in Control-M' END AS Agent_Status,
T1.VERSION,
PORTS,
MANAGEMENT_IP,
OPERATING_SYSTEM,
CLUSTER_ALIAS,
NODEGROUP,
APPLICATION_ID,
DATE_CONFIGURED,
CONFIGURED_BY
FROM CTMAGENTAUDIT T1
LEFT OUTER JOIN T2
ON T2.NODEID = T1.HOST;