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

5 Sintassi SQL e principi di query per un migliore monitoraggio del database

L'adozione di una buona sintassi SQL e di pratiche di scrittura di query migliorerà l'efficacia del monitoraggio del database e, di conseguenza, migliorerà le prestazioni complessive del database. Esistono diversi modi collaudati per migliorare le prestazioni del database attraverso la sintassi e le regolazioni delle query. Ne abbiamo scelti 5 su cui concentrarci.

1. Espressioni CASE

Di seguito sono riportate alcune best practice per ottenere le migliori prestazioni dalle espressioni CASE:

  • Le espressioni CASE migliorano le prestazioni spostando il vecchio codice procedurale in codice dichiarativo che può quindi essere ottimizzato. Per le espressioni CASE di base, usa , che è la più facilmente ottimizzabile. Per le espressioni CASE estese, l'hashing e altre tecniche saranno le più utili.
  • Poiché QUANDO le clausole vengono verificate da sinistra a destra, è meglio disporre le clausole in modo che le più probabili siano elencate per prime. Ciò ridurrà il tempo speso per scansioni non necessarie.
  • La maggior parte degli ottimizzatori tiene conto anche dei test ridondanti considerando l'ordine di esecuzione. Non appena viene eseguita una clausola WHEN, non è necessario testare nuovamente tale clausola. Tuttavia, molti ottimizzatori non sono bravi a leggere le espressioni CASE nidificate, quindi è meglio appiattirle a un unico livello.

2. Double-Dipping e la clausola della finestra

In SQL, "doppia immersione" significa visitare la stessa tabella più di una volta, il che rallenta notevolmente la query. Idealmente, cerca di portare a termine tutti i tuoi lavori in un'unica visita al tavolo. Ma se ciò non è possibile, ci sono alcuni modi per mitigare l'impatto sulle prestazioni.

L'uso di tabelle temporanee costruite dalla stessa tabella di base unite insieme non è davvero il modo migliore per evitare il doppio immersione. Una soluzione migliore consiste nell'utilizzare l'ottimizzatore del motore SQL per visualizzare le VISUALIZZAZIONI e condividere i risultati come un tavolo di lavoro.

Se sei limitato a un ottimizzatore tutt'altro che stellare, usa le tabelle temporanee e fai il lavoro manualmente.

Sebbene i metodi di cui sopra siano perfettamente accettabili, il modo migliore per evitare il double-dipping consiste nell'utilizzare la clausola della finestra poiché le clausole secondarie funzionano in modo simile alle funzionalità di sottoquery. Ad esempio:

  • La clausola PARTITION BY è come un GROUP BY locale che divide la tabella in raggruppamenti.
  • La clausola ORDER BY impone un ordine ordinato.
  • Il frame della finestra (ROW o RANGE) è come una clausola WHERE locale.

Puoi ottimizzare le funzioni della finestra seguendo queste regole:

  • Nell'indice, ordina prima le colonne della clausola PARTITION BY, poi le colonne utilizzate nella clausola ORDER BY.
  • Includi qualsiasi altra colonna a cui si fa riferimento nella query come colonne incluse dell'indice.

3. Utilizzare le procedure archiviate

I mappatori relazionali a oggetti (ORM) causano numerosi problemi di prestazioni quando generano il proprio codice. Se devi utilizzare gli ORM, scrivi le tue stored procedure in modo che le prestazioni non ne risentano.

Esistono molti modi in cui l'utilizzo delle stored procedure migliora le prestazioni, tra cui:

  • Trasmettono meno dati sulla rete, quindi le transazioni sono più veloci
  • Abilitano chiamate più brevi
  • Le stored procedure sono più facili da tracciare negli strumenti del profilo
  • Poiché una procedura memorizzata è un oggetto reale nel database, è più facile ottenere statistiche sulle prestazioni, il che rende più facile trovare problemi di prestazioni
  • Aumenta il riutilizzo del piano di esecuzione
  • Semplificano la gestione dei casi limite e aggiungono comportamenti di controllo o blocco delle modifiche
  • Le stored procedure non sono vulnerabili agli attacchi SQL injection

4. ELIMINA e AGGIORNA in batch

L'eliminazione o l'aggiornamento di molti dati da una scansione di tabelle di grandi dimensioni utilizza molte risorse poiché entrambe le istruzioni vengono eseguite come un'unica transazione. Questo è un killer delle prestazioni perché se si verifica un errore mentre la transazione è in esecuzione ed è necessario interromperla, il sistema deve ripristinare l'intera transazione. Il rollback di grandi quantità di dati consuma molto tempo e blocca altre transazioni.

È possibile evitare questo problema di prestazioni eseguendo aggiornamenti ed eliminazioni in piccoli batch. Quando esegui queste transazioni in batch, se la transazione viene interrotta, il rollback è molto più piccolo. Il rollback di una piccola quantità di dati non richiede molto tempo e altre transazioni possono funzionare mentre il batch viene eseguito il commit su disco.

5. Non recuperare più colonne del necessario

Una delle principali cause delle query con prestazioni scadenti è il recupero di colonne estranee. Evita le pratiche che generalmente comportano la restituzione di un numero eccessivo di colonne. Tieni presente quanto segue:

  • L'uso non necessario di "SELECT *" in una query probabilmente restituirà più colonne del necessario. Questo è uno spreco di risorse e blocca le risorse di altri utenti. È particolarmente importante non utilizzare indiscriminatamente "SELECT *" nei database SQL colonnari.
  • Eseguire un taglia e incolla per riutilizzare il codice può generare colonne estranee.
  • Quando invochi una VIEW, potresti ritrovarti con colonne nidificate. Annulla l'annidamento delle query con prestazioni scadenti per verificare quali colonne sono presenti ed eliminare le colonne di dimensioni eccessive che non ti servono. Una buona indicazione che hai un problema è che hai una clausola WHERE con condizioni aggiuntive e una clausola FROM con join esterni aggiuntivi.

Questi sono solo alcuni dei modi in cui un approccio coscienzioso alla sintassi SQL e alla scrittura di query può migliorare il monitoraggio del database. Non aver paura di provarne altri. Un database ad alte prestazioni è fondamentale per raggiungere gli obiettivi aziendali in ogni organizzazione.