Do ponto de vista do desempenho, essas consultas são idênticas.
UNION ALL
não prejudicará o desempenho, pois o Oracle
estima a UNION
'ed consulta apenas quando necessário, ele não armazena em cache os resultados primeiro. SELECT
a sintaxe é mais flexível no sentido de que você pode manipular mais facilmente o SELECT
query se você quiser mudar alguma coisa. Por exemplo, esta consulta:
insert into pager (PAG_ID,PAG_PARENT,PAG_NAME,PAG_ACTIVE)
select 8000,0,'Multi 8000',1 from dual
union all select 8001,0,'Multi 8001',1 from dual
pode ser reescrito como
INSERT
INTO pager (PAG_ID,PAG_PARENT,PAG_NAME,PAG_ACTIVE)
SELECT 7999 + level, 0, 'Multi ' || 7999 + level, 1
FROM dual
CONNECT BY
level <= 2
Ao substituir
2
com o número apropriado, você pode obter qualquer número de linhas que desejar. No caso de
INSERT ALL
, você teria que duplicar a descrição da tabela de destino, que é menos legível se você precisar, digamos, de 40
linhas.