0Pricing
Coding Interview Prep · Lezione

Ordine delle colonne negli indici compositi

La regola del prefisso più a sinistra e la scelta dell'ordine corretto delle colonne in base al carico di lavoro.

Ordine delle colonne negli indici compositi è una lezione Coding Interview Prep gratuita su CoddyKit. Questa è la lezione 2 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 Coding Interview Prep, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Coding Interview Prep include 4 lezioni in totale.

La questione degli indici composti

Una volta imparato a spiegare un indice su una singola colonna, gli intervistatori alzano il livello: 'Si eseguono query insieme su customer_id e order_date. Come le indicizzerebbe?' La risposta attesa è un indice composto (multicolonna) e una motivazione dell'ordine delle colonne.

Questa lezione illustra la regola del prefisso iniziale, il concetto che spiega quasi ogni domanda sugli indici composti che potrebbe ricevere.

Cos'è un indice composto

Un indice composto indicizza più colonne come una tupla ordinata. Le voci vengono ordinate prima in base alla prima colonna, poi alla seconda in caso di parità, e così via, proprio come un elenco telefonico ordinato prima per cognome e poi per nome.

L'ordine è estremamente importante, perché la priorità dell'ordinamento segue l'ordine delle colonne dichiarato.

CREATE INDEX idx_orders_cust_date
  ON orders (customer_id, order_date);

La regola del prefisso iniziale

La regola fondamentale è questa: un indice composto su (A, B, C) può essere usato per query che applicano filtri su un prefisso iniziale di queste colonne:

  • solo A, sì
  • A, B, sì
  • A, B, C, sì
  • solo B, NO
  • B, C, NO

Pensi all'elenco telefonico: può trovare tutte le persone con cognome 'Smith', ma non può trovare in modo efficiente tutte quelle che si chiamano 'John' indipendentemente dal cognome, perché l'elenco non è ordinato in quel modo.

Esempio completo: corrispondenze sul prefisso

Con l'indice su (customer_id, order_date), queste query possono usarlo perché iniziano con customer_id:

La prima usa solo la colonna iniziale. La seconda usa entrambe, restringendo prima in base a customer_id e cercando poi all'interno delle voci di quel cliente, ordinate per data.

-- Uses the index (leading column)
SELECT * FROM orders WHERE customer_id = 42;

-- Uses the index fully (both columns, in order)
SELECT * FROM orders
WHERE customer_id = 42
  AND order_date >= '2026-01-01';

Esempio completo: mancata corrispondenza del prefisso

Questa query applica un filtro solo sulla seconda colonna, quindi in genere l'indice su (customer_id, order_date) non può guidare la ricerca: le voci non sono ordinate globalmente per order_date.

Se filtrare solo in base a order_date è un caso comune, serve un indice separato che inizi con order_date.

-- Does NOT use idx_orders_cust_date efficiently
SELECT * FROM orders
WHERE order_date >= '2026-01-01';

-- Fix: an index that leads with order_date
CREATE INDEX idx_orders_date ON orders (order_date);

Uguaglianza prima dell'intervallo

Una precisazione di livello senior: metta le colonne usate con uguaglianza (=) prima di quelle usate con un intervallo (<, >, BETWEEN). Quando l'indice raggiunge una colonna con un intervallo, non può più usare le colonne successive per restringere la ricerca.

Per una query come status = 'paid' AND created_at > ?, l'ordine corretto è (status, created_at), non quello inverso.

-- Query: WHERE status = 'paid' AND created_at > '2026-01-01'
-- Good: equality column first
CREATE INDEX idx_orders_status_created
  ON orders (status, created_at);

Scegliere la colonna iniziale

Come si sceglie quale colonna mettere per prima? Gli intervistatori si aspettano una risposta basata sul carico di lavoro:

  • Metta per prima la colonna che compare nel maggior numero di query, soprattutto come filtro di uguaglianza.
  • Preferisca una colonna con elevata selettività (molti valori distinti), in modo che il primo passaggio elimini il maggior numero di righe.
  • Consideri le esigenze di ORDER BY: fare corrispondere l'ordine dell'indice può evitare un ordinamento.

La colonna iniziale è quella che svolge il lavoro di filtraggio più intenso nell'insieme delle query effettive.

Un indice composto aiuta nell'ordinamento

Un indice composto gestisce anche ORDER BY su un prefisso iniziale. Poiché le voci sono ordinate prima per customer_id e poi per order_date, una query sugli ordini di un cliente, ordinati per data, è praticamente gratuita: non serve un ordinamento separato.

-- No sort step: the index already supplies this order
SELECT * FROM orders
WHERE customer_id = 42
ORDER BY order_date;

Non aggiunga indici ridondanti

I candidati spesso creano troppi indici. Se esiste già (customer_id, order_date), un indice separato sulla sola colonna (customer_id) è solitamente ridondante: l'indice composto copre già le query sulla colonna iniziale.

Ogni indice aggiuntivo richiede spazio di archiviazione e rallenta le scritture, quindi l'obiettivo è il minor numero possibile di indici che copra i suoi schemi di query, non un indice per ogni colonna.

Dimostrarlo con EXPLAIN

Come sempre, confermi la scelta del pianificatore. Dopo aver creato un indice composto, esegua EXPLAIN e verifichi se compare come Index Scan e quante righe stima.

Se una query con prefisso non corrispondente ricade su una scansione sequenziale, questa è la prova che l'ordine delle colonne non si adatta al carico di lavoro: è esattamente ciò che spiegherebbe a un intervistatore.

EXPLAIN
SELECT * FROM orders
WHERE customer_id = 42
  AND order_date >= '2026-01-01';

Come esprimerlo durante il colloquio

Una sintesi efficace:

'Un indice composto viene ordinato in base alle sue colonne da sinistra a destra, quindi può gestire qualsiasi prefisso iniziale di queste colonne, ma non un sottoinsieme di colonne finali. Metto per prima la colonna più usata nei filtri e con elevata selettività, colloco i predicati di uguaglianza prima di quelli di intervallo e, quando possibile, faccio corrispondere l'ordine di ORDER BY; poi verifico con EXPLAIN.'

Verifica rapida

Applichi la regola del prefisso più a sinistra.

Riepilogo: ordine dell'indice composto

Punti chiave:

  • Un indice composto viene ordinato da sinistra a destra e supporta solo un prefisso più a sinistra delle sue colonne.
  • Metta per prima la colonna più usata nelle query e con alta selettività.
  • Metta le colonne con condizioni di uguaglianza prima di quelle con condizioni di intervallo.
  • Un prefisso corrispondente può soddisfare anche ORDER BY senza eseguire un ordinamento.
  • Eviti gli indici a colonna singola ridondanti già coperti da un indice composto e verifichi con EXPLAIN.

Prossimo argomento: gli indici di copertura che eliminano completamente il recupero dall'heap.

Domande Frequenti

La lezione «Ordine delle colonne negli indici compositi» è gratuita?

Sì — il testo completo di «Ordine delle colonne negli indici compositi» è 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 Coding Interview Prep, passa a CoddyKit PRO. Il corso Coding Interview Prep include 4 lezioni in totale.

Cosa imparerò in «Ordine delle colonne negli indici compositi»?

La regola del prefisso più a sinistra e la scelta dell'ordine corretto delle colonne in base al carico di lavoro. Eserciti Coding Interview Prep 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 Coding Interview Prep?

Non è richiesta alcuna esperienza precedente. Coding Interview Prep su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 2 di 4.

Quanto tempo richiede la lezione «Ordine delle colonne negli indici compositi»?

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 Coding Interview Prep?

Sì. Ogni lezione Coding Interview Prep 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

  1. Indici B-Tree e loro utilità
  2. Ordine delle colonne negli indici compositi
  3. Indici covering e scansioni index-only
  4. Quando gli indici sono dannosi: scritture e selettività
← Torna a Coding Interview Prep