Algoritmo di Query Optimization
Espressione Algebrica di Query L’Algebra Relazionale può essere utilizzata come linguaggio per interrogare una base di dati. Giugno-Pulvirenti AA 2006-2007
Equivalenza di espressioni Due espressioni sono equivalenti se producono lo stesso risultato qualunque sia l'istanza attuale della base di dati L'equivalenza è importante in pratica perché i DBMS cercano di eseguire espressioni equivalenti a quelle date, ma meno "costose" Giugno-Pulvirenti AA 2006-2007
Un'equivalenza importante Push selection (se A è attributo di R2 ) SEL A=10 (R1 JOIN R2) = R1 JOIN SEL A=10 ( R2) Riduce in modo significativo la dimensione del risultato intermedio (e quindi il costo dell'operazione) Giugno-Pulvirenti AA 2006-2007
Giugno-Pulvirenti AA 2006-2007 Esempio di Query Consideriamo l’esempio del database degli studenti costituito dalle tre tabelle Studenti, Esami, Corsi. Supponiamo che vogliamo trovare tutti i professori che hanno dato a Mario Rossi piu’ di 27. ProfessoreNome=‘Mario Rossi’& Voto>27 (Studenti Esami Corsi) Giugno-Pulvirenti AA 2006-2007
Giugno-Pulvirenti AA 2006-2007 Query Optimization La stessa query PNome=‘Mario Rossi’& Voto>27 (Studenti Esami Corsi) può essere espressa come P (Nome=‘Mario Rossi’Studenti ( Voto>27 Esami Corsi)) Che risulta essere molto più efficiente! Giugno-Pulvirenti AA 2006-2007
Regole per la query optimization Anticipare l’applicazione delle proiezioni e delle restrizioni rispetto al prodotto (e quindi alle giunzioni), in modo da ridurre la dimensione delle tabelle a cui applicare il prodotto (e le giunzioni). Le seguenti regole possono essere utilmente utilizzate per l’ottimizzazione di espressioni: Giugno-Pulvirenti AA 2006-2007
Regole sulla restrizione Raggruppamento di restrizioni C(X) (C(Y)(E))=C(X)&C(Y)(E) Commutativita’ di e C(X)(Y(E))=Y(C(X)(E)) ,se XY; Y(C(X)(XY(E)))=Y(C(X)(E))se X Y. Giugno-Pulvirenti AA 2006-2007
Restrizione e Prodotto Anticipazione di rispetto a . C(X)(E F)= C(X)(E) F, se X attr(E). C(X)&C(Y)(E F)= C(X)(E) C(Y)(F), se X attr(E), Y attr(F). C(X)&C(Y)&C(Z)(E F)= C(Z)( C(X)(E) C(Y)(F)), se X attr(E), Y attr(F), Z attr(E) , Z attr(F) Giugno-Pulvirenti AA 2006-2007
Regole per la proiezione Raggruppamento di proiezioni. X(Y(E))= X(E) , se XY. Eliminazione di proiezioni superflue. X(E)=E , se X = attr.(E). Anticipazione della rispetto a . XY(E F)= X(E) Y(F) , se Xattr(E), Yattr.(F). Giugno-Pulvirenti AA 2006-2007
Giugno-Pulvirenti AA 2006-2007 L’ALGORITMO Si applicano le seguenti tre regole (per anticipare la selezione) finché è possibile Si anticipa rispetto a usando la 2.a C(X)(Y(E))=Y(C(X)(E)) ,se XY; Si raggruppano le restrizioni usando la 1 C(X) (C(Y)(E))=C(X)&C(Y)(E). Si anticipa l’esecuzione di su usando la 3. Giugno-Pulvirenti AA 2006-2007
Anticipazione delle proiezioni Si eliminano le proiezioni superflue usando la 5 X(E)=E , se X = attr.(E). . Si raggruppano le proiezioni mediante la regola 4 X(Y(E))= X(E) , se XY.. Si anticipa l’esecuzione delle proiezioni rispetto al prodotto usando ripetutamente la 2 [Commutativita’ di e ] (quando E è un prodotto, da destra verso sinistra) e la 6 [Anticipazione della rispetto a ]. Giugno-Pulvirenti AA 2006-2007
Giugno-Pulvirenti AA 2006-2007 Dato lo schema: impiegato(i_id, i_nome, eta, stipendio); dipartimento(d_id, d_nome, budget, manager_id); lavora(i_id, d_id, perc_tempo); Per ogni impiegato indicare il nome di tutti i suoi manager. Giugno-Pulvirenti AA 2006-2007
Giugno-Pulvirenti AA 2006-2007 Indicare il nome di tutti i dipartimenti con più di 10 impiegati. Giugno-Pulvirenti AA 2006-2007
Giugno-Pulvirenti AA 2006-2007 Nome ed età di tutti gli impiegati che lavorano sia in Amministrazione che in Contabilità (Nota che possono lavorare anche in altri dipartimenti oltre i due indicati). Giugno-Pulvirenti AA 2006-2007
Giugno-Pulvirenti AA 2006-2007 Nome di tutti i manager che lavorano in più di un dipartimento ed indicare il numero di dipartimenti per cui lavorano. Giugno-Pulvirenti AA 2006-2007
Giugno-Pulvirenti AA 2006-2007 Nome di tutti i dipendenti che lavorano solo per un dipartimento Giugno-Pulvirenti AA 2006-2007