Ogni cliente/ utente vuole sempre una risposta veloce sul loro processo di recupero dei dati. Quindi abbiamo bisogno di progettare un buon database che fornisce le migliori prestazioni durante la manipolazione dei dati che si traduce nelle migliori prestazioni di un’applicazione. Tuttavia, non esiste un modo semplice per definire le migliori prestazioni, ma possiamo scegliere diversi modi per migliorare le prestazioni delle query SQL, che rientrano in varie categorie come la creazione di indici, l’utilizzo di join e la riscrittura di una sottoquery da utilizzare JOIN, ecc.
Come sviluppatore, sappiamo che qualsiasi query SQL può essere scritta in più modi, ma dovremmo seguire le migliori pratiche/ tecniche per ottenere migliori prestazioni di query. Ne sto evidenziando alcuni di seguito:
1. L’uso ESISTE invece di IN per verificare l’esistenza dei dati.
2. Evitare * nell’istruzione SELECT. Dai il nome delle colonne di cui hai bisogno.
3. Scegliere il tipo di dati appropriato. Ad esempio, per memorizzare le stringhe utilizzare varchar al posto del tipo di dati di testo. Utilizzare il tipo di dati di testo, ogni volta che è necessario memorizzare dati di grandi dimensioni (più di 8000 caratteri).
4. Evitare nchar e nvarchar se possibile poiché entrambi i tipi di dati richiedono solo la doppia memoria come char e varchar.
5. Evitare NULL nel campo a lunghezza fissa. In caso di requisito di NULL, utilizzare il campo a lunghezza variabile (varchar) che occupa meno spazio per NULL.
6. Evitare di avere clausola. La clausola Having è necessaria se si desidera filtrare ulteriormente il risultato di un’aggregazione.
7. Creare indici cluster e non cluster.
8. Mantieni l’indice cluster piccolo poiché i campi utilizzati nell’indice cluster possono essere utilizzati anche nell’indice non cluster.
9. La maggior parte delle colonne selettive dovrebbe essere posizionata più a sinistra nella chiave di un indice non cluster.
10. Eliminare gli indici inutilizzati.
11. Meglio creare indici su colonne che hanno valori interi invece di caratteri. I valori interi utilizzano meno overhead rispetto ai valori dei caratteri.
12. Utilizzare join invece di sotto-query.
13. Utilizzare le espressioni WHERE per limitare le dimensioni delle tabelle dei risultati create con join.
14. Utilizzare TABLOCKX durante l’inserimento in una tabella e TABLOCK durante la fusione.
15. Utilizzare CON (NOLOCK) durante l’interrogazione dei dati da qualsiasi tabella.
16. Usa SET NOCOUNT ON e usa TRY-CATCH per evitare condizioni di deadlock.
17. Evita i cursori poiché il cursore è molto lento nelle prestazioni.
18. Utilizzare Tabella variabile al posto della tabella temporanea. L’uso di tabelle temporanee richiede l’interazione con il database TempDb che è un’attività che richiede tempo.
19. Utilizzare UNION ALL al posto di UNION, se possibile.
20. Utilizzare il nome dello schema prima del nome degli oggetti SQL.
21. Utilizzare la stored Procedure per i dati utilizzati di frequente e le query più complesse.
22. Mantenere la transazione il più piccola possibile poiché la transazione blocca i dati delle tabelle di elaborazione e può risultare in deadlock.
23. Evitare il prefisso ” sp_ ” con il nome della stored procedure definito dall’utente perché SQL Server cerca prima la procedura definita dall’utente nel database master e successivamente nel database della sessione corrente.
24. Evitare l’uso di Sub query scalari non correlati. Utilizzare questa query come query separata anziché parte della query principale e memorizzare l’output in una variabile, a cui fare riferimento nella query principale o in una parte successiva del batch.
25. Evitare Multi-statement Table Valued Functions (TVFS). I TVF multi-statement sono più costosi dei TVF in linea.
Buon apprendimento!