Ur prestandasynpunkt är dessa frågor identiska.
UNION ALL
kommer inte att skada prestandan, eftersom Oracle
uppskattar UNION
'ed query endast när den behöver den, cachelagrar den inte resultaten först.
SELECT
syntaxen är mer flexibel i den meningen att du enklare kan manipulera SELECT
fråga om du vill ändra något.
Till exempel den här frågan:
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
kan skrivas om som
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
Genom att ersätta 2
med lämpligt antal kan du få valfritt antal rader du vill.
I fallet med INSERT ALL
, skulle du behöva duplicera destinationstabellens beskrivning, som är mindre läsbar om du behöver, säg, 40
rader.