Comprendere gli algoritmi di join
Esplori come PostgreSQL esegue diversi tipi di join: Nested Loop, Hash Join e Merge Join.
Comprendere gli algoritmi di join è una lezione PostgreSQL Performance & Query Optimization gratuita su CoddyKit. Questa è la lezione 1 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento PostgreSQL Performance & Query Optimization, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso PostgreSQL Performance & Query Optimization include 4 lezioni in totale.
Parti di questa lezione non sono ancora state tradotte e vengono mostrate in inglese.
Joins: Connecting Data
Welcome to understanding PostgreSQL join algorithms! Joins are fundamental for combining data from multiple tables.
They allow you to retrieve related information that is spread across your database schema, forming a complete picture.
Beyond Basic Joins
When you write a JOIN clause, PostgreSQL doesn't just pick one way to execute it. It has several powerful algorithms at its disposal.
The database's query planner chooses the most efficient algorithm based on factors like table size, available indexes, and data distribution.
Nested Loop Join Basics
The Nested Loop Join (NLJ) is the simplest algorithm. It works like a nested 'for' loop:
- For each row in the outer table...
- It scans the inner table for matching rows.
NLJ is efficient for small datasets or when the inner table's join column is indexed, allowing quick lookups.
NLJ in Action
Consider joining a small users table with a user_details table. If user_details.user_id is indexed, NLJ can be very fast.
Try creating and joining these tables:
CREATE TABLE users (user_id INT PRIMARY KEY, name VARCHAR(50));
CREATE TABLE user_details (detail_id INT PRIMARY KEY, user_id INT, address VARCHAR(100));
INSERT INTO users VALUES (1, 'Alice'), (2, 'Bob');
INSERT INTO user_details VALUES (101, 1, '123 Main St'), (102, 2, '456 Oak Ave');
SELECT u.name, ud.address
FROM users u
JOIN user_details ud ON u.user_id = ud.user_id;Hash Join: Faster Matches
Hash Join is often chosen for larger, unsorted tables, especially with equality (=) join conditions. It works in two phases:
- Build Phase: PostgreSQL scans the smaller (or estimated smaller) table and builds an in-memory hash table using the join key.
- Probe Phase: It scans the larger table, hashes each row's join key, and probes the hash table for matches.
This method is very effective when enough memory is available for the hash table.
Hash Join Scenario
Imagine joining two large tables, products and sales, on their product_id. If neither table is sorted or indexed on product_id, a Hash Join is a strong candidate.
The planner will likely choose Hash Join for this query:
CREATE TABLE products (product_id INT PRIMARY KEY, name VARCHAR(50));
CREATE TABLE sales (sale_id INT PRIMARY KEY, product_id INT, quantity INT);
INSERT INTO products VALUES (1, 'Laptop'), (2, 'Mouse');
INSERT INTO sales VALUES (1001, 1, 2), (1002, 2, 1), (1003, 1, 3);
SELECT p.name, s.quantity
FROM products p
JOIN sales s ON p.product_id = s.product_id;Merge Join: Sorted Efficiency
The Merge Join is highly efficient when both tables are already sorted on their join keys, or can be sorted cheaply. It also works in phases:
- Sort Phase: If not already sorted, both tables are sorted on their join columns.
- Merge Phase: PostgreSQL simultaneously scans both sorted tables, merging matching rows. It's like merging two sorted lists.
This is beneficial for range joins or when data is retrieved in sorted order.
Merge Join Use Case
If you're joining two tables, employees and departments, and both are indexed (and thus often sorted) on their respective ID columns, or if your query involves an ORDER BY on the join key, a Merge Join can be optimal.
PostgreSQL might use Merge Join here:
CREATE TABLE employees (emp_id INT PRIMARY KEY, dept_id INT, name VARCHAR(50));
CREATE TABLE departments (dept_id INT PRIMARY KEY, dept_name VARCHAR(50));
INSERT INTO employees VALUES (1, 10, 'John'), (2, 20, 'Jane');
INSERT INTO departments VALUES (10, 'HR'), (20, 'IT');
SELECT e.name, d.dept_name
FROM employees e
JOIN departments d ON e.dept_id = d.dept_id
ORDER BY e.emp_id;PostgreSQL's Decisions
The PostgreSQL query planner uses a cost-based optimizer to decide which join algorithm to use. It estimates the cost of each possible plan based on:
- Table and index statistics
- Available memory (
work_mem) - Join condition type (e.g., equality, range)
- Estimated row counts
Using EXPLAIN is crucial to see which algorithm the planner chose!
Algorithm Challenge
You need to join two very large tables, customers and orders, on customer_id. There are no indexes on customer_id in either table, and the data is unsorted. Which join algorithm is PostgreSQL most likely to choose for optimal performance?
Join Algorithms: Key Takeaways
In this lesson, you explored the three primary join algorithms PostgreSQL uses:
- Nested Loop Join: Simple, good for small sets or indexed inner tables.
- Hash Join: Efficient for large, unsorted tables with equality joins, using a hash table.
- Merge Join: Best when tables are already sorted on join keys or can be sorted cheaply.
Understanding these helps you interpret EXPLAIN plans and write more performant queries. Next, we'll look at rewriting complex joins!
Impara SQL con un tutor IA — gratis
Scrivi ed esegui vero codice nel tuo browser, ricevi aiuto istantaneo da un tutor IA disponibile 24/7, e riprendi da dove hai lasciato sul web o nell'app.
- Corsi
- 22
- Lezioni
- 88
Domande Frequenti
La lezione «Comprendere gli algoritmi di join» è gratuita?
Sì — il testo completo di «Comprendere gli algoritmi di join» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso PostgreSQL Performance & Query Optimization, passa a CoddyKit PRO. Il corso PostgreSQL Performance & Query Optimization include 4 lezioni in totale.
Cosa imparerò in «Comprendere gli algoritmi di join»?
Esplori come PostgreSQL esegue diversi tipi di join: Nested Loop, Hash Join e Merge Join. Eserciti PostgreSQL Performance & Query Optimization con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare PostgreSQL Performance & Query Optimization?
Non è richiesta alcuna esperienza precedente. PostgreSQL Performance & Query Optimization su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 1 di 4.
Quanto tempo richiede la lezione «Comprendere gli algoritmi di join»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione PostgreSQL Performance & Query Optimization?
Sì. Ogni lezione PostgreSQL Performance & Query Optimization include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Comprendere gli algoritmi di join
- Riscrittura di join complessi
- Sottoquery, CTE e join a confronto
- Ottimizzare i join LATERAL e le ricerche correlate