Condividi
Migliorare le perfomance di una query usando le views
In Sql Server ho un database con una tabella enorme, si parla di oltre 10 milioni di record (big data). La tabella contiene alcuni tipi di dati differenziati diciamo per area, ho in totale 50 aree geografiche (stati). Quindi penso che se creo 50 viste, una per ogni stato da questa tabella, le prestazioni di esecuzione di una query sql dalla mia applicazione potrebbero migliorare? E' così? Avete altri suggerimenti?
Risolta
2
Sql Server
17-09-2019
3 Risposte
1200 Visite
+2
Risposte ( 3 approvate )
Le viste (views) normali (non indicizzate) non possono migliorare le prestazioni. Le viste non sono altro che tabelle temporanee (ricavate da una o più tabelle del db) potrebbero essere pensate come "scorciatoie" o "alias" per fare query SELECT più semplici (i dati che ti servono li raggruppi nella view) anziché complesse interrogazioni o query multiple, poiché non hanno una struttura fisica al di sotto di esse. Detto questo non hanno una particolare incidenza sulle prestazioni, a maggior ragione se esse (le viste) come le tabelle non presentano indici.
Ciò di cui hai bisogno è creare indici (index) appropriati sulla tua tabella e, possibilmente, riprogettare la tabella, ad esempio dividendola in più tabelle.
Se la tua tabella è ben organizzata e dispone dell'indice giusto con le interrogazioni (query) ottimizzate, allora il resto della differenza in termini di performance la fà la quantità di cache, di memoria, e la velocità di lettura del disco (hard disk).
La creazione di viste (views) non risolverà in alcun modo questo problema, devi tenere conto che è sempre lo stesso dato sullo stesso disco / cache, con le viste hai solo un modo logico diverso di riferirsi ad esso.
Ad onor del vero per Microsoft Sql Server qualche milione di record non rappresenta un database molto grande, esso è in grado di gestire senza difficoltà big data ben più enormi di questo.
Se in un database relativamente piccolo come il tuo si verificano problemi di prestazioni, allora probabilmente la colpa è da imputare ad una errata indicizzazione della tabella, ad una errata progettazione del database ed esecuzione di query con prestazioni scarse. Il server SQL può gestire trilioni di record se progettato correttamente.
Di contro le Viste (views) possono invece essere deleterie per le prestazioni se si utilizzano viste che si richiamano tra di loro diverse volte, quindi come già suggeritoti ti consiglierei di rivedere la progettazione del tuo database ed una corretta gestione degli indici (index) all'interno delle normali tabelle.