Ottimizzazione delle query SQL: trucchi e tecniche avanzate

Ottimizzazione delle query SQL: trucchi e tecniche avanzate

Marco Puccio

Introduzione

L'ottimizzazione delle query SQL è un passaggio fondamentale per migliorare le performance di un'applicazione. Query lente possono compromettere l'esperienza utente e sovraccaricare il server. In questo articolo vedremo tecniche avanzate per velocizzare le interrogazioni ai database relazionali.


1) Creazione di Indici Ottimizzati

Gli indici sono la chiave per ridurre i tempi di ricerca all'interno di una tabella. Un indice consente al database di individuare rapidamente i record senza dover scansionare l'intera tabella.

-- Creazione di un indice su una colonna specifica
CREATE INDEX IX_Clienti_Nome
ON Clienti (Nome);

-- Creazione di un indice composto
CREATE INDEX IX_Ordini_DataCliente
ON Ordini (Data, ClienteId);



2) Utilizzo di Query Ottimizzate

Scrivere query efficienti è essenziale per evitare tempi di risposta elevati. Evita query nidificate non necessarie e utilizza join ottimizzati.

-- ❌ Query non ottimizzata
SELECT *
FROM Clienti
WHERE UPPER(Nome) = 'MARCO';

-- ✅ Query ottimizzata
SELECT *
FROM Clienti
WHERE Nome = 'Marco';



3) Limitare il numero di righe restituite

Se sai di aver bisogno solo di un sottoinsieme di dati, limita le righe restituite con LIMIT o TOP.

-- MySQL
SELECT * FROM Ordini LIMIT 10;

-- SQL Server
SELECT TOP 10 * FROM Ordini;



4) Evitare SELECT *

L'uso di SELECT * recupera tutte le colonne della tabella, anche quelle non necessarie. Questo rallenta le query e sovraccarica la rete.

-- ❌ Query non ottimizzata
SELECT * FROM Clienti;

-- ✅ Query ottimizzata
SELECT Nome, Cognome, Email FROM Clienti;



5) Utilizzare le Viste Indicizzate

Le viste indicizzate permettono di memorizzare i risultati di una query, migliorando significativamente le performance.

-- Creazione di una vista indicizzata
CREATE VIEW vw_OrdiniClienti
WITH SCHEMABINDING
AS
SELECT ClienteId, COUNT(*) AS NumeroOrdini
FROM Ordini
GROUP BY ClienteId;

-- Indicizzazione della vista
CREATE UNIQUE CLUSTERED INDEX IX_vw_OrdiniClienti
ON vw_OrdiniClienti (ClienteId);



Conclusioni

Ottimizzare le query SQL è un passaggio essenziale per aumentare le performance di un database. Con l'uso di indici, query ottimizzate, viste indicizzate e limitazioni strategiche, puoi migliorare notevolmente i tempi di risposta delle tue applicazioni.