184 messaggi dal 22 giugno 2008
Se c'è una cosa che non ho mai capito come si deve è se le relazioni tra le tabelle aiutino a migliorare le performance delle query... sicuramente garantiscono una certa coerenza dei dati ma infondo infondo una volta gestita la politica di insert, update e delete tramite codice, le relazioni tra tabelle hanno ancora ragione di esistere?
11.886 messaggi dal 09 febbraio 2002
Contributi
ciao,

deckman ha scritto:

le relazioni tra tabelle hanno ancora ragione di esistere?

certo, l'integrità referenziale è molto importante, non puoi lasciare che sia l'applicazione ad assolvere questo compito. L'applicazione possiede dei bug e può sollevare eccezioni quando meno te l'aspetti e quindi rischi di trovarti con righe orfane, record duplicati e altre amenità del genere, soprattutto se esegui i comandi SQL in maniera non transazionale.

Non dimenticare poi il valore 'informativo' delle relazioni. E' utile che chi osserva il database sia in grado di capire come sono legate tra di loro le varie tabelle. Immagina, un domani, che il database sia dato in mano ad un altro sviluppatore affinché estenda l'applicazione o la riscriva da zero. Come potrebbe fare bene il suo lavoro se non è il database stesso a parlargli di sé? Con la documentazione prodotta dallo sviluppatore precedente (sperando che sia completa e accurata)?

Leggi questa Storia dalla sala macchine, ti racconta di uno dei problemi in cui potresti incappare se il tuo DB non impone alcuna integrità referenziale.
http://www.soft-land.org/storie/11/story13

ciao :)
Modificato da BrightSoul il 13 giugno 2012 13.43 -

Enjoy learning and just keep making
184 messaggi dal 22 giugno 2008
Ok.. quello che dici tu è sacro santo ed assodato... ma volevo sapere gli effetti delle relazioni sulle performance... in altre parole una query lanciata su due tabelle relazionate è più rapida di una lanciata su due tabelle senza relazioni?
11.886 messaggi dal 09 febbraio 2002
Contributi
ciao,

deckman ha scritto:
una query lanciata su due tabelle relazionate è più rapida


Ora ti rispondo ma forse non ho capito il perché della tua domanda. Le relazioni sono uno strumento per ottenere l'integrità referenziale; la tua decisione di usarle o meno non deve dipendere dal fatto che le query siano più veloci o più lente.

Se andassi in bici di notte non collegheresti forse la dinamo, nonostante ti rallenti?

Tornando in tema: sembra che il query optimizer di Sql server tragga beneficio dalla presenza delle relazioni, come puoi leggere in questo caso di studio.
http://www.scarydba.com/2010/11/22/do-foreign-key-constraints-help-performance/
Ciò è vero per istruzioni SELECT, mentre i comandi INSERT e DELETE saranno un pelo più lenti perché Sql Server deve garantire il rispetto dei vincoli esistenti tra le tabelle.

A proposito di prestazioni, puoi migliorarle adottando altri accorgimenti, ad esempio progettando uno schema che non richieda un numero eccessivo di join, oppure osservando gli execution plan per capire come ottimizzare le query di selezione. Infine, aggiungere gli opportuni indici là dove servono.

Questo grafico ti mostra un elenco di interventi da considerare. Le aree più grosse identificano maggiori opportunità di migliorare le performance.

ciao
Modificato da BrightSoul il 14 giugno 2012 22.59 -

Enjoy learning and just keep making

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.