UNION ALL a UNION (koszt usuwania duplikatów)
Poznaj koszt usuwania duplikatów przez UNION i dowiedz się, dlaczego UNION ALL jest szybsze, gdy wiadomo, że duplikatów nie ma.
UNION ALL a UNION (koszt usuwania duplikatów) to bezpłatna lekcja SQL Academy na CoddyKit. To lekcja 2 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej SQL Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs SQL Academy zawiera 4 lekcji w sumie.
Różnica
UNION— łączy i usuwa duplikatyUNION ALL— łączy i zachowuje każdy wiersz
UNION ALL jest szybszy
Usuwanie duplikatów jest kosztowne (sortowanie lub haszowanie). UNION ALL całkowicie pomija ten etap. Jeśli wiadomo, że duplikaty nie mogą wystąpić, należy zawsze wybrać UNION ALL.
Przykład: gdy zbiory są rozłączne
Aktywne i zarchiwizowane zamówienia nigdy się nie nakładają — należy użyć UNION ALL:
SELECT * FROM active_orders
UNION ALL
SELECT * FROM archived_orders;Przykład: gdy duplikaty mają znaczenie
Łączenie listy zdarzeń zamówień, w której mogą występować powtórzone wiersze: być może rzeczywiście chcą Państwo policzyć każde wystąpienie — UNION ALL.
SELECT order_id FROM email_events
UNION ALL
SELECT order_id FROM push_events;Przykład: gdy chcą Państwo usunąć duplikaty
Dwie listy newsletterów, w których niektóre adresy e-mail występują na obu listach — potrzebny jest jeden wiersz na każdy unikalny adres e-mail:
SELECT email FROM list_a
UNION
SELECT email FROM list_b;UNION ALL z różnych źródeł
Połącz tabele z metrykami w kanał „wszystkie raporty”:
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;Kolejność wewnątrz każdego podzapytania
Większość baz danych ignoruje ORDER BY wewnątrz pojedynczych podzapytań UNION/UNION ALL (chyba że są one opakowane). ORDER BY należy zastosować na końcu:
SELECT ... FROM a
UNION ALL
SELECT ... FROM b
ORDER BY ts DESC;LIMIT po każdej stronie
Należy umieścić każdą stronę w nawiasach, aby zastosować LIMIT niezależnie:
(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);Gdy planer optymalizuje UNION
Jeśli planer może udowodnić, że obie strony są rozłączne (np. dzięki wzajemnie wykluczającym się filtrom WHERE), może wewnętrznie wykonać UNION jako UNION ALL — ale nie należy na tym polegać. Należy wyrazić wybór jawnie.
UNION a OR
W przypadku warunków OR, które nie mogą efektywnie korzystać z tego samego indeksu, szybsze może być użycie UNION ALL z dwoma zapytaniami korzystającymi z osobnych indeksów:
-- 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';Proszę uważać na kolejność kolumn
Operatory zbiorowe dopasowują kolumny według pozycji, a NIE według nazw. SELECT a, b FROM t1 UNION ALL SELECT b, a FROM t2 zamienia znaczenie kolumn — należy zachować ostrożność.
Podsumowanie
UNION ALL jest domyślnym wyborem ze względu na wydajność; po UNION należy sięgać tylko wtedy, gdy rzeczywiście potrzebna jest deduplikacja.
Szybkie sprawdzenie
Kiedy można zastąpić UNION szybszym UNION ALL?
Często zadawane pytania
Czy lekcja „UNION ALL a UNION (koszt usuwania duplikatów)” jest bezpłatna?
Tak — pełny tekst „UNION ALL a UNION (koszt usuwania duplikatów)” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu SQL Academy, przejdź na CoddyKit PRO. Kurs SQL Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „UNION ALL a UNION (koszt usuwania duplikatów)”?
Poznaj koszt usuwania duplikatów przez UNION i dowiedz się, dlaczego UNION ALL jest szybsze, gdy wiadomo, że duplikatów nie ma. Ćwiczysz SQL Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć SQL Academy?
Nie wymagamy żadnego doświadczenia. SQL Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 2 z 4.
Ile czasu zajmuje lekcja „UNION ALL a UNION (koszt usuwania duplikatów)”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji SQL Academy?
Tak. Każda lekcja SQL Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- UNION, INTERSECT, EXCEPT
- UNION ALL a UNION (koszt usuwania duplikatów)
- Wyrażenia CASE i zapytania przestawne
- Wzorce crosstab (PostgreSQL crosstab())