PostgreSQL Performance & Query Optimization · Lezione

Indici compositi e covering

Velocizzi le query su più colonne con gli indici compositi ed elimini completamente gli accessi alla tabella usando indici covering con INCLUDE.

Lezione 4 di 413 passaggi

Indici compositi e covering è una lezione PostgreSQL Performance & Query Optimization gratuita su CoddyKit. Questa è la lezione 4 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.

Oltre gli indici su una singola colonna

Molte query filtrano in base a più di una colonna. Un indice composito comprende più colonne e può servire queste query molto meglio di diversi indici su singole colonne.

Creare un indice composito

Elenchi le colonne nell'ordine in cui desidera indicizzarle.

CREATE INDEX idx_orders_cust_date
ON orders (customer_id, order_date);

L'ordine delle colonne è importante

Un indice composito su (a, b) aiuta le query che filtrano solo su a o su a AND b, ma in genere NON quelle che filtrano solo su b.

La regola del prefisso più a sinistra

PostgreSQL può utilizzare qualsiasi prefisso più a sinistra dell'indice. Quindi (a, b, c) serve per i filtri su a, su a+b e su a+b+c.

Ordinamento in base alla selettività

Metta per prima la colonna più selettiva o filtrata più frequentemente, spesso una colonna con uguaglianza prima di una colonna con intervallo, per massimizzare il numero di righe eliminate anticipatamente dall'indice.

CREATE INDEX idx_orders_status_date
ON orders (status, order_date);

Il costo della ricerca nell'heap

Una normale scansione dell'indice trova le righe corrispondenti e poi accede alla tabella (l'heap) per leggere le altre colonne. Questi recuperi aggiuntivi hanno un costo in termini di I/O.

Indici di copertura

Un indice di copertura contiene tutte le colonne necessarie alla query, quindi PostgreSQL risponde utilizzando solo l'indice, con una Index Only Scan, senza accedere all'heap.

Utilizzare INCLUDE

La clausola INCLUDE aggiunge colonne non chiave alle pagine foglia dell'indice, rendendole disponibili senza inserirle nella chiave ricercabile.

CREATE INDEX idx_orders_cust_incl
ON orders (customer_id)
INCLUDE (order_date, total);

Confermare Index Only Scan

Controlli il piano: dovrebbe visualizzare Index Only Scan invece di Index Scan accompagnata dal recupero dall'heap.

EXPLAIN ANALYZE
SELECT order_date, total
FROM orders WHERE customer_id = 42;

La limitazione della visibility map

Le Index Only Scan devono comunque accedere all'heap quando le pagine non sono contrassegnate come completamente visibili. Mantenere le tabelle sottoposte regolarmente a vacuum mantiene aggiornata la visibility map, così le scansioni possono restare limitate all'indice.

VACUUM ANALYZE orders;

Costi degli indici ampi

Un numero maggiore di colonne significa indici più grandi e scritture più lente. Aggiunga colonne di copertura solo per le query più utilizzate, non ovunque.

Verifica rapida

Metta alla prova ciò che ha imparato.

Riepilogo

Ha imparato come gli indici compositi gestiscono i filtri su più colonne secondo la regola del prefisso più a sinistra, perché l'ordine e la selettività delle colonne sono importanti e come gli indici di copertura con INCLUDE abilitano le Index Only Scan, bilanciando questi vantaggi con dimensioni maggiori e costi di scrittura più elevati.

Gratis per iniziare

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 «Indici compositi e covering» è gratuita?

Sì — il testo completo di «Indici compositi e covering» è 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 «Indici compositi e covering»?

Velocizzi le query su più colonne con gli indici compositi ed elimini completamente gli accessi alla tabella usando indici covering con INCLUDE. 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 4 di 4.

Quanto tempo richiede la lezione «Indici compositi e covering»?

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

  1. Fondamenti degli indici B-Tree
  2. Creazione e utilizzo degli indici
  3. Quando e come creare indici
  4. Indici compositi e covering
← Torna a PostgreSQL Performance & Query Optimization