Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Suggerimenti per ridurre la complessità di SQL Server

Le query SQL complesse sono eccellenti per rendere le ricerche nel database molto specifiche e flessibili, ma possono anche essere difficili da capire e quasi impossibile da eseguire il debug, e potresti anche dimenticare di riutilizzarle.

Quando le query vanno oltre i comandi SELECT e WHERE standard, è possibile che le prestazioni di SQL Server inizino a peggiorare perché gli ottimizzatori di query hanno problemi a elaborare query lunghe e complesse.

Se noti che le tue query SQL utilizzano un numero eccessivo di join e sottoquery complesse, annidano le query nelle clausole WHERE e fanno affidamento su molte clausole AND e OR, è probabilmente un buon momento per fare un passo indietro e cercare modi per ridurre al minimo parte della complessità.

Suggerimenti per ridurre al minimo la complessità delle query di SQL Server

Come accennato in precedenza, gli ottimizzatori di query di SQL Server non amano le query SQL complesse. Ecco cinque modi per rendere le tue query meno complesse in modo che possano essere ottimizzate per migliorare le prestazioni.

1. Elimina le clausole OR quando possibile

Il modo più semplice per rendere le query meno complesse consiste nell'eliminare le clausole OR quando possibile. Poiché OR è inclusivo, SQL Server deve elaborare ogni componente della clausola separatamente, il che rallenta davvero le operazioni.

Quando non è possibile rimuovere OR, l'opzione migliore è suddividere query lunghe e complesse in query più piccole. Sembra un po' controintuitivo che l'elaborazione di più query sia più veloce dell'elaborazione di una, ma quando si tratta di OR, è meglio utilizzare più query.

2. Ottimizza le ricerche di stringhe

SQL Server fa molte cose bene, ma le ricerche di stringhe fuzzy non sono una di queste. Le ricerche di stringhe con caratteri jolly, in particolare su tabelle di grandi dimensioni, sono inefficienti e dannose per le prestazioni.

Ci sono alcune modifiche che puoi applicare alle ricerche di stringhe che aiutano a ridurre al minimo l'impatto sulle prestazioni.

  • Utilizza una ricerca per stringa iniziale invece di una ricerca con caratteri jolly (ad esempio, cambia "%For%" in "For%")
  • Applica filtri come data o ora alla query per ridurre la dimensione dei dati prima di eseguire la ricerca di stringhe
  • Applica l'indicizzazione full-text per generare indici che consentono la ricerca flessibile di stringhe su colonne di testo

3. Fai attenzione alle grandi operazioni di scrittura

Grandi operazioni di scrittura causano contese e generano molti file di registro. Se non selezionate, le operazioni di scrittura di grandi dimensioni possono bloccare le risorse degli utenti e creare problemi di latenza, nonché riempire i registri delle transazioni o persino l'archiviazione fisica.

Poiché non puoi sempre evitare operazioni di scrittura di grandi dimensioni, tieni presente quando le esegui (meno è occupato il server, meglio è) o riduci il numero di righe modificate per operazione per ridurre al minimo il rischio di contesa.

4. Pulisci gli indici

Gli indici sono uno dei principali colpevoli quando si tratta di scarse prestazioni, ma quando si tenta di ottimizzare query SQL complesse, gli indici richiedono alcune considerazioni speciali.

SQL Server dispone di diversi strumenti che consentono di sapere quando gli indici mancanti influiscono sulle prestazioni delle query. Ma prima di entrare e iniziare ad aggiungere indici, è necessario determinare se l'indice aggiuntivo migliorerà la query a sufficienza da far valere lo sforzo. Ad esempio, se la query viene eseguita 1 milione di volte al giorno e l'indice la migliora del 25%, probabilmente ne vale la pena. Se la query viene utilizzata di rado, potrebbe non avere senso.

Alcune altre cose da considerare prima di iniziare ad aggiungere indici sono se gli indici esistenti possono essere modificati per coprire questo caso d'uso senza aggiungerne uno nuovo e se questo indice esiste già ma l'ottimizzatore lo sta ignorando per qualche motivo.

Altri modi in cui gli indici possono influire sulle prestazioni delle query sono l'indicizzazione eccessiva o insufficiente di tabelle e tabelle prive di un indice cluster o di una chiave primaria. La risoluzione di questi problemi aiuterà con le prestazioni delle query SQL complesse.

5. Tieni il conto alla rovescia della tabella

Ogni volta che aggiungi una tabella a una query, la query diventa più complessa. Tabelle eccessive spesso comportano piani di esecuzione scadenti perché Query Optimizer non può funzionare in modo efficiente.

Se noti che una query complessa ha un rendimento scarso e ha molte tabelle, questa potrebbe essere una di quelle volte in cui dividere la query in query più piccole è la scelta migliore perché allevierà parte del carico sull'ottimizzatore.

Gli strumenti di ottimizzazione delle prestazioni possono aiutare a ridurre al minimo la complessità di SQL Server

Quando query complesse impantanano Query Optimizer, spesso si finisce con un piano di esecuzione inefficiente e le prestazioni ne risentono. Oltre ai suggerimenti precedenti, gli strumenti di ottimizzazione delle prestazioni sono una risorsa preziosa per ridurre al minimo la complessità delle query di SQL Server e ottimizzare le prestazioni.

Di seguito sono elencate alcune delle funzionalità da cercare durante la ricerca di soluzioni di ottimizzazione delle prestazioni.

Analisi del piano di esecuzione di SQL Server

Lo strumento di ottimizzazione dovrebbe analizzare il piano di esecuzione e determinare cosa è necessario modificare affinché SQL Server esegua le operazioni in modo più efficiente.

Visualizzazione del piano di esecuzione di SQL Server

Lo strumento di ottimizzazione dovrebbe presentare il piano di esecuzione in un modo che sia di facile comprensione e ti aiuti a individuare le operazioni che stanno rallentando l'esecuzione.

Ottimizzazione SQL automatizzata

Lo strumento di ottimizzazione dovrebbe analizzare il tuo SQL, quindi riscriverlo automaticamente finché non raggiunge il massimo miglioramento del tempo di esecuzione.

Confronto tra istruzioni SQL ottimizzate e originali

Lo strumento di ottimizzazione dovrebbe evidenziare le modifiche nell'istruzione SQL in modo da poter confrontare le versioni originali e ottimizzate prima di distribuire le modifiche.

Confronto tra i piani di esecuzione di SQL Server

Gli strumenti di ottimizzazione dovrebbero fornire un confronto tra i piani di esecuzione originali e ottimizzati in modo da sapere cosa è cambiato tra le versioni.

Prova statistica

Il tuo strumento di ottimizzazione dovrebbe fornire dati che mostrano perché l'SQL ottimizzato viene eseguito più velocemente dell'istruzione SQL originale.

Le query complesse di SQL Server possono avere un impatto negativo sulle prestazioni del sistema. Usa questi suggerimenti e una soluzione di ottimizzazione delle prestazioni di alta qualità per eliminare la complessità e ottimizzare l'efficienza delle query SQL.