SQL Academy · Oppitunti

UNION ALL vs UNION (kaksoiskappaleiden poiston kustannus)

Ymmärtäkää UNIONin tekemän kaksoiskappaleiden poiston työmäärä ja miksi UNION ALL on nopeampi, kun tiedätte, ettei kaksoiskappaleita ole.

Oppitunti 2/413 vaihetta

UNION ALL vs UNION (kaksoiskappaleiden poiston kustannus) on ilmainen SQL Academy-oppitunti CoddyKitissä. Tämä on oppitunti 2/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu SQL Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. SQL Academy-kurssilla on yhteensä 4 oppituntia.

Ero

  • UNION — yhdistää ja poistaa duplikaatit
  • UNION ALL — yhdistää ja säilyttää kaikki rivit

UNION ALL on nopeampi

Duplikaattien poistaminen on kallista (lajittelu tai hajautus). UNION ALL ohittaa sen kokonaan. Kun tiedät, ettei duplikaatteja voi olla, valitse aina UNION ALL.

Esimerkki: kun osiot eivät mene päällekkäin

Aktiiviset ja arkistoidut tilaukset eivät koskaan mene päällekkäin — käytä UNION ALL -operaattoria:

SELECT * FROM active_orders
UNION ALL
SELECT * FROM archived_orders;

Esimerkki: kun duplikaateilla on merkitystä

Kun yhdistät tilausluettelon tapahtumia, joissa voi olla toistuvia rivejä: saatat todella haluta laskea jokaisen esiintymän — käytä UNION ALL -operaattoria.

SELECT order_id FROM email_events
UNION ALL
SELECT order_id FROM push_events;

Esimerkki: kun haluat poistaa duplikaatit

Kaksi uutiskirjelistaa, joissa jotkin sähköpostiosoitteet esiintyvät molemmissa — haluat yhden rivin kutakin yksilöllistä sähköpostiosoitetta kohden:

SELECT email FROM list_a
UNION
SELECT email FROM list_b;

UNION ALL eri lähteiden kanssa

Yhdistä mittaritaulut yhdeksi "kaikki raportit" -syötteeksi:

SELECT 'login' AS event, ts, user_id FROM logins
UNION ALL
SELECT 'signup',          ts, user_id FROM signups
UNION ALL
SELECT 'purchase',        ts, user_id FROM purchases
ORDER BY ts DESC LIMIT 100;

Järjestys kunkin alikyselyn sisällä

Useimmat tietokannat ohittavat ORDER BY -lauseen UNION- tai UNION ALL -lausekkeen yksittäisten alikyselyjen sisällä (ellei alikyselyä ole kääritty). Käytä ORDER BY -lausetta lopussa:

SELECT ... FROM a
UNION ALL
SELECT ... FROM b
ORDER BY ts DESC;

LIMIT kummallekin puolelle

Kääri kumpikin puoli sulkeisiin, jotta voit rajoittaa niitä erikseen LIMIT-lauseella:

(SELECT id FROM new_orders ORDER BY created_at DESC LIMIT 10)
UNION ALL
(SELECT id FROM old_orders ORDER BY created_at DESC LIMIT 10);

Kun kyselysuunnittelija optimoi UNION-operaation

Jos kyselysuunnittelija pystyy todistamaan, etteivät osiot mene päällekkäin (esimerkiksi toisensa poissulkevilla WHERE-suodattimilla), se saattaa suorittaa UNION-operaation sisäisesti UNION ALL -operaationa — älä kuitenkaan luota tähän. Ilmaise tarkoitus eksplisiittisesti.

UNION vai OR

OR-ehdoissa, jotka eivät pysty hyödyntämään samaa indeksiä tehokkaasti, kahden erikseen indeksoidun kyselyn UNION ALL voi olla nopeampi:

-- Slow OR (may not use either index):
SELECT * FROM users WHERE city = 'NYC' OR country = 'DE';

-- Sometimes faster:
SELECT * FROM users WHERE city = 'NYC'
UNION
SELECT * FROM users WHERE country = 'DE';

Sarakkeiden järjestys

Joukko-operaattorit yhdistävät sarakkeet sijainnin, EIVÄT nimen perusteella. SELECT a, b FROM t1 UNION ALL SELECT b, a FROM t2 vaihtaa sarakkeiden merkitykset keskenään — olkaa varovaisia.

Kertaus

UNION ALL on suorituskyvyn kannalta oletusvalinta; käyttäkää UNIONia vain, kun tarvitsette todella duplikaattien poistoa.

Pikatarkistus

Milloin voitte korvata UNIONin nopeammalla UNION ALL -operaattorilla?

Aloita maksutta

Opi SQL tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
46
Oppitunnit
183

Usein kysytyt kysymykset

Onko oppitunti ”UNION ALL vs UNION (kaksoiskappaleiden poiston kustannus)” ilmainen?

Kyllä – oppitunnin ”UNION ALL vs UNION (kaksoiskappaleiden poiston kustannus)” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko SQL Academy-kurssin, päivitä CoddyKit PROhon. SQL Academy-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”UNION ALL vs UNION (kaksoiskappaleiden poiston kustannus)”?

Ymmärtäkää UNIONin tekemän kaksoiskappaleiden poiston työmäärä ja miksi UNION ALL on nopeampi, kun tiedätte, ettei kaksoiskappaleita ole. Harjoittelet SQL Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni SQL Academy-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin SQL Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 2/4.

Kuinka kauan ”UNION ALL vs UNION (kaksoiskappaleiden poiston kustannus)”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä SQL Academy-oppitunnilla?

Kyllä. Jokainen SQL Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. UNION, INTERSECT, EXCEPT
  2. UNION ALL vs UNION (kaksoiskappaleiden poiston kustannus)
  3. CASE-lausekkeet ja pivot-kyselyt
  4. Ristiintaulukointimallit (PostgreSQL crosstab())
← Takaisin: SQL Academy