Se stai leggendo questo articolo, molto probabilmente hai già familiarità con SQL. Sai come scrivere query SQL di base. Esistono molti modi per eseguire una query SQL per ottenere i risultati desiderati sul database.
Tuttavia, non tutte le query SQL vengono create uguali. La maggior parte può essere ottimizzata per seguire le best practice per le query SQL. Questo articolo è incentrato su 9 suggerimenti per l'ottimizzazione delle query SQL. Dopo aver letto, conoscerai tutte le cose da fare e da non fare per scrivere query SQL.
1. Evita l'uso di SELECT asterisco (SELECT *)
Questa è una delle best practice SQL più importanti. La query SELECT * restituisce i record da tutte le colonne della tabella. Sebbene utile in alcuni casi, questa query spesso produce numerose complicazioni:
- Potrebbe non essere necessario recuperare tutte le colonne. Tuttavia, SELECT * li restituisce tutti, consumando una larghezza di banda eccessiva per eseguire una query sulla rete.
- I nomi delle colonne in una tabella possono essere modificati o rimossi e possono essere aggiunte nuove colonne. Pertanto, potresti ricevere risultati imprevisti per la query SELECT *. Specificare i nomi delle colonne è un'idea migliore.
- SELECT * è più lento di SELECT Column Names perché quest'ultimo può utilizzare gli indici di colonna per restituire i dati.
- L'ordine delle colonne restituite da SELECT * non è sotto il tuo controllo. Tuttavia, definisci l'ordine desiderato quando specifichi i nomi delle colonne.
2. Usa la clausola WHERE e HAVING in modo accurato
Le clausole WHERE e HAVING in SQL hanno funzionalità diverse. Quindi, dovremmo usarli in modo diverso. Di seguito sono riportati i tre casi d'uso principali di WHERE e HAVING:
- WHERE può essere utilizzato con query CRUD, ad esempio SELECT, INSERT, UPDATE, DELETE. D'altra parte, puoi usare HAVING solo con l'istruzione SELECT.
- WHERE filtra i dati prima di qualsiasi operazione di aggregazione come GROUP BY. Quindi può essere utilizzato senza alcuna funzione di aggregazione. HAVING dovrebbe essere utilizzato dopo l'aggregazione.
- Possiamo utilizzare le funzioni di aggregazione, come SUM, MIN, MAX COUNT con la clausola HAVING. Con la clausola WHERE, non possiamo utilizzare funzioni di aggregazione, a meno che questa clausola non faccia parte di una sottoquery contenuta dalla clausola HAVING.
3. Utilizza la query INNER JOIN invece della clausola WHERE per unire le tabelle
La query JOIN è probabilmente una delle query SQL più utili. Ti consente di SELEZIONARE i dati da più tabelle. Sebbene tu possa utilizzare la clausola WHERE per ottenere dati aggregati da due tabelle, la clausola WHERE è altamente inefficiente.
La clausola WHERE restituisce CROSS JOIN che è un prodotto cartesiano di record in entrambe le colonne. Ad esempio, se hai 1.000 record nella tabella A e lo stesso numero di record nella tabella B, la clausola WHERE creerà un CROSS JOIN con 1.000 x 1.000 =1.000.000 di record.
Se le colonne delle tabelle A e B coinvolte nella clausola WHERE hanno solo 1.000 valori comuni, la clausola WHERE restituirà 1.000 record dai 1.000.000 di record iniziali creati dal prodotto cartesiano.
La clausola INNER JOIN restituisce solo 1.000 record in cui entrambe le tabelle A e B hanno valori comuni nelle colonne. In questo caso, INNER JOIN ha un lavoro 1.000 volte inferiore rispetto alla clausola WHERE.
Alcuni database convertono la clausola WHERE nella query JOIN nella clausola INNER JOIN dietro le quinte. Tuttavia, è sempre consigliabile utilizzare INNER JOIN in modo esplicito invece della clausola WHERE per seguire le migliori pratiche di codifica SQL.
4. Utilizza EXISTS, NOT EXISTS invece di IN e NOT IN in SQL
Usa sempre EXIST sopra la clausola IN se vuoi confermare l'esistenza di un valore in una tabella particolare.
Il processo che esegue la clausola EXISTS si interrompe non appena trova il valore richiesto nella tabella. D'altra parte, la query IN esegue la scansione di tutto anche dopo aver trovato il valore necessario.
Allo stesso modo, dovresti sempre usare NOT EXISTS invece di NOT IN quando cerchi il valore che non esiste in una tabella.
5. Utilizza Uguale all'operatore (=) invece di LIKE Operatore in SQL
È possibile utilizzare entrambi gli operatori =e LIKE per abbinare le stringhe. La principale differenza tra i due è che l'operatore LIKE viene utilizzato per abbinare caratteri jolly come % alla ricerca di stringhe parziali, mentre l'operatore uguale "=" cerca corrispondenze esatte.
Se devi scegliere tra i due, preferisci sempre l'operatore uguale ("="), poiché utilizza colonne indicizzate. Quindi, è più veloce della clausola LIKE.
6. Utilizza la clausola LIMIT per ridurre i risultati di ricerca
Se devi restituire dati da più tabelle o colonne, usa la clausola LIMIT (nota anche come clausola TOP) per ridurre i risultati della query. Se ci sono migliaia di colonne o se vuoi vedere come appaiono i dati solo nelle tue tabelle, non è necessario restituire tutte le righe. Limita invece il numero di righe restituite dalla query SELECT con l'aiuto della clausola LIMIT in combinazione con essa.
7. Utilizza gli alias di tabella quando esegui query su più tabelle
Per evitare confusione ed evitare che i database analizzino i nomi delle colonne durante la ricerca della tabella a cui appartengono, utilizza sempre gli alias di tabella.
Devi già utilizzare nomi di tabelle/alias se hai gli stessi nomi di colonna in più tabelle, quindi questo non aumenterà il tuo carico di lavoro.
8. Evita di prefissare le stored procedure con "sp_"
Se hai lavorato con le stored procedure, molto probabilmente hai anteposto al nome della stored procedure "sp_". Questo non è il massimo.
SQL Server inizia cercando le stored procedure con "sp_" all'inizio dei loro nomi nel database principale prima di procedere alla ricerca altrove.
Pertanto, puoi risparmiare molto tempo non anteponendo alle stored procedure "sp_". Quindi, invece di cercare di individuare la stored procedure nel database principale, il server SQL verificherà direttamente dbo come proprietario della stored procedure.
9. Adotta un buon stile di scrittura delle query
È essenziale seguire le best practice per le query SQL come le buone pratiche di stile quando si scrivono le query SQL. Presta attenzione ai seguenti consigli per migliorare lo stile di scrittura delle query:
- Aggiungi sempre commenti alle query SQL. I commenti non solo aiuteranno gli altri membri del team a comprendere meglio le tue domande, ma ti ricorderanno anche cosa stavi facendo tu stesso in passato.
- Utilizza convenzioni di denominazione ovvie. Il database, le tabelle, i nomi delle colonne, le tabelle temporanee e altri nomi di variabili devono essere leggibili e chiari al 100%.
- Indenta le tue query quando possibile. Le query interne devono essere rientrate di una scheda da sinistra. Anche i nomi e i tipi di colonna all'interno di una tabella devono essere rientrati. Il rientro garantisce un aspetto più pulito e migliora la leggibilità delle query che si riflette nelle best practice di SQL Server per le query.
Conclusione
SQL è un linguaggio molto flessibile che fornisce numerosi modi per eseguire le attività desiderate su un database. Per rendere le tue applicazioni più efficienti e produttive ed evitare problemi di database a lungo termine, applica le moderne best practice per l'ottimizzazione delle query SQL per scrivere le tue query. Questi metodi ti aiutano ad accelerare l'ottimizzazione delle prestazioni in SQL, eliminare le routine non necessarie e rendere tutto il tuo lavoro più conciso e trasparente.
Leggi anche
22 eleganti esempi di indici SQL per velocizzare le tue query