Le viste del database sono solo un mezzo per semplificare l'accesso ai dati o offrono vantaggi in termini di prestazioni quando si accede alle viste anziché eseguire semplicemente la query su cui si basa la vista? Sospetto che le viste funzionino equamente solo aggiungendo la query di visualizzazione memorizzata a ogni query sui dati della vista, è corretto o ci sono altri dettagli e/o ottimizzazioni?Le visualizzazioni del database influiscono sulle prestazioni della query?
risposta
Dipende dall'RDBMS, ma in genere non è in corso l'ottimizzazione, ed è solo un modo conveniente per semplificare le query. Alcuni sistemi di database utilizzano comunque "viste materializzate", che utilizzano un meccanismo di memorizzazione nella cache.
In genere una visualizzazione è solo un modo per creare una comune abbreviazione per definire i set di risultati di cui avete bisogno frequentemente.
Tuttavia, c'è un lato negativo. La tentazione è quella di aggiungere in ogni colonna che pensi che potresti aver bisogno da qualche parte quando potresti voler usare la vista. Quindi YAGNI viene violato. Non solo colonne, ma a volte join esterni aggiuntivi vengono attaccati "nel caso in cui". Pertanto gli indici di copertura potrebbero non coprire più e il piano di query potrebbe aumentare in termini di complessità (e riduzione dell'efficienza).
YAGNI è un concetto critico nella progettazione SQL.
Divertente come ho sempre rispettato i principi YAGNI, ma non sapevo che esistessero realmente fino a quando non ho cercato YAGNI :) – SAMills
Ho sempre considerato Views come una stored procedure di sola lettura. Fornisci al database quante più informazioni possibili in anticipo, in modo da poter effettuare la pre-compilazione nel miglior modo possibile.
È possibile indicizzare anche le viste consentendo di accedere a una vista ottimizzata dei dati che si stanno cercando per il tipo di query che si sta eseguendo.
Qualche esempio reale di questo? Conoscete alcun RDMS che eseguirà una visualizzazione più veloce rispetto a un'istruzione di selezione equivalente? Ovviamente l'indice aiuta, ma quell'indice aiuta anche l'istruzione select. La tua risposta implica che una vista è più veloce, mi stavo chiedendo se hai prove o solo indovinando? –
Nessun server DB di cui sono a conoscenza crea un piano di esecuzione query al momento della visualizzazione o la creazione di stored procedure. I piani di esecuzione richiedono statistiche sugli indici, che non sono disponibili in fase di compilazione. La compilazione trasforma semplicemente SQL/DDL in un formato interno. –
sindre, alcuni server DB supportano "viste indicizzate", che sono più simili a "viste materializzate" - più vicine a una tabella gestita automaticamente rispetto a una vista di per sé. –
In generale, le visualizzazioni devono essere equivalenti a una query scritta direttamente nelle tabelle sottostanti.
Ma: potrebbero esserci casi di margini e sarà necessario testare il codice. Tutti i moderni sistemi RDBMS dispongono di strumenti che consentono di visualizzare i queryplans e monitorare l'esecuzione. Non prendere la mia (o qualcun altro) parola per questo, quando puoi avere i dati definitivi a portata di mano.
Sebbene una determinata query in esecuzione all'interno di una vista e la stessa query in esecuzione all'esterno della vista si comportino in modo equivalente, le cose diventano molto più complicate rapidamente quando è necessario unire due viste insieme. Si può facilmente finire per portare tabelle che non sono necessarie nella query, o portare tabelle in ridondante. L'ottimizzatore del database potrebbe avere più problemi nella creazione di un buon piano di esecuzione delle query. Quindi, anche se le viste possono essere molto buone in termini di sicurezza più fine e simili, non sono necessariamente buone per la modularità.
So che questo è un thread precedente. La discussione è buona, ma voglio aggiungere un altro pensiero. Le prestazioni dipendono anche da ciò che state utilizzando per estrarre i dati. Ad esempio, se si sta terminando il front-end con qualcosa come Microsoft Access, si può sicuramente ottenere prestazioni per alcune query complesse utilizzando una vista. Ciò è dovuto al fatto che Access non preleva sempre dal server SQL come vorremmo: in alcuni casi trascinerebbe intere tabelle e poi tenterà di elaborare localmente da lì! Non così se usi una vista.
Sì, in tutti i piani di query di tutti i moderni RDBMS (MSSQL dopo il 2005? Ecc.) Vengono memorizzati nella cache eliminando il sovraccarico di pianificazione della query e accelerando le prestazioni rispetto allo stesso SQL eseguito in linea. Precedentemente a questo (e si applica anche alle istruzioni SQL/Preparate parametrizzate), le persone ritenevano che le procedure memorizzate funzionassero meglio.
Molti ancora si aggrappano a questo oggi rendendolo un mito DB moderno. Dal momento che Views/PS ha ottenuto la pianificazione delle query memorizzate nella cache degli SP, sono stati praticamente pari.
- 1. sqlite3 influiscono sulle prestazioni?
- 2. Il nome della tabella o la lunghezza del nome della colonna influiscono sulle prestazioni?
- 3. In che modo i valori NULL influiscono sulle prestazioni in una ricerca nel database?
- 4. Il wrapping e il rethrowing di un'eccezione influiscono sulle prestazioni?
- 5. Celle di tabelle anonime: influiscono sulle prestazioni di rifusione/ridisegno?
- 6. Il numero di colonne influisce sulle prestazioni della query?
- 7. In che modo i vari progetti di ottimizzazione Javascript influiscono sulle prestazioni del DOM?
- 8. Le istruzioni di importazione multiple in un programma influiscono sulle prestazioni?
- 9. Le dimensioni di un file war influiscono in qualche modo sulle prestazioni dell'applicazione e/o del server delle applicazioni?
- 10. Quali sono gli impatti dell'abilitazione TDE sulle prestazioni del database?
- 11. Lo spazio dei nomi o la struttura delle cartelle influiscono sulle prestazioni di un assieme?
- 12. Impatto sulle prestazioni della direttiva ng-csp
- 13. Le impostazioni specifiche del browser non influiscono sulle applicazioni del browser
- 14. La lunghezza della chiave influisce sulle prestazioni del dizionario?
- 15. L'ordine delle clausole della query linq EF influenza le prestazioni?
- 16. Perché le piccole modifiche al codice non influiscono sulle dimensioni del file exe?
- 17. I file Struts 2 e Dojo sono troppo pesanti e influiscono sulle prestazioni del sito. Eventuali rimedi?
- 18. In che modo i vincoli DataTable di ADO.NET influiscono sulle prestazioni?
- 19. L'hard coding della stringa influisce sulle prestazioni?
- 20. Effetto Systemtap sulle prestazioni
- 21. Come migliorare le prestazioni del database SQLite per Android
- 22. Suggerimenti sulle prestazioni per l'asp classico?
- 23. Prestazioni del database della vista rispetto alla nuova tabella
- 24. Le visualizzazioni "GONE" sono dannose per le prestazioni?
- 25. Considerazioni sulle prestazioni per condizionali query di ricerca (forme)
- 26. Primefaces Domande sulle prestazioni
- 27. Le statistiche sulle Tempo Query (PostgreSQL)
- 28. Le istruzioni sull'utilizzo inutilizzate riducono le prestazioni?
- 29. La chiave esterna migliora le prestazioni della query?
- 30. Impatto sulle prestazioni dell'ereditarietà virtuale
Non vedo l'ora di leggere le risposte. Dall'esperienza pratica, SE il set di risultati risultante è significativo, abbiamo scoperto che otteniamo prestazioni migliori inserendo la vista all'interno di una procedura per tagliare il set di risultati. – SAMills