2 η Σειρά Ασκήσεων Ημερομηνία Παράδοσης: 14/11/2016

Σχετικά έγγραφα
ΗΥ460 Συστήµατα Διαχείρισης Βάσεων Δεδοµένων Χειµερινό Εξάµηνο 2016 Διδάσκοντες: Βασίλης Χριστοφίδης

Εισαγωγή στην Επεξεργασία Ερωτήσεων. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1

Εισαγωγή στην Επεξεργασία Ερωτήσεων. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1

ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ ΤΜΗΜΑ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΚΑΙ ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΑΣΚΗΣΗ ΔΕΥΤΕΡΗ

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ

Επεξεργασία Ερωτήσεων

Επεξεργασία Ερωτήσεων

Επεξεργασία Ερωτήσεων

Άσκηση 1 (15 μονάδες) (Επεκτατός Κατακερματισμός)

Εισαγωγή στην Επεξεργασία Ερωτήσεων. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1

Το εσωτερικό ενός Σ Β

Εισαγωγή. Γενική Εικόνα του Μαθήµατος. Το εσωτερικό ενός Σ Β. Εισαγωγή. Εισαγωγή Σ Β Σ Β. Αρχεία ευρετηρίου Κατάλογος συστήµατος Αρχεία δεδοµένων

Εισαγωγή στην. Εισαγωγή Σ Β. Αρχεία ευρετηρίου Κατάλογος. συστήματος. Αρχεία δεδομένων

ΗΥ-460 Συστήµατα ιαχείρισης Βάσεων εδοµένων ηµήτρης Πλεξουσάκης Βασίλης Χριστοφίδης

BΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ ΕΞΕΤΑΣΗ ΦΕΒΡΟΥΑΡΙΟΥ 2005

Επεξεργασία Ερωτήσεων

Επεξεργασία Ερωτήσεων

ΗΥ460 Συστήματα Διαχείρισης Βάσεων Δεδομένων Χειμερινό Εξάμηνο 2018 Project

Επεξεργασία ερωτημάτων

Ονοματεπώνυμο: Αριθμός Μητρώου:

Πανεπιστήµιο Κρήτης Τµήµα Επιστήµης Υπολογιστών. ΗΥ-460 Συστήµατα ιαχείρισης Βάσεων εδοµένων ηµήτρης Πλεξουσάκης Βασίλης Χριστοφίδης

Τα δεδοµένα συνήθως αποθηκεύονται σε αρχεία στο δίσκο Για να επεξεργαστούµε τα δεδοµένα θα πρέπει αυτά να βρίσκονται στη

ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ ΤΜΗΜΑ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΚΑΙ ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΛΥΣΗ ΣΤΗΝ ΕΥΤΕΡΗ ΑΣΚΗΣΗ

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ

Δεντρικά Ευρετήρια. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1

ΛΥΣΗ ΤΗΣ ΔΕΥΤΕΡΗΣ ΑΣΚΗΣΗΣ Όλγα Γκουντούνα

Ευρετήρια. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1

Ευρετήρια. Ευρετήρια. Βάσεις Δεδομένων : Ευρετήρια 1

BΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ ΕΞΕΤΑΣΗ ΦΕΒΡΟΥΑΡΙΟΥ 2013

ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ - ΤΜΗΥΠ ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ ΙI

Δεντρικά Ευρετήρια. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1

Δεντρικά Ευρετήρια. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1

Ο βελτιστοποιητής ερωτημάτων (query optimizer) Μετασχηματισμός εκφράσεων σχεσιακής άλγεβρας Υπολογισμός μεγεθών πράξεων σχεσιακής άλγεβρας

Οι πράξεις της συνένωσης. Μ.Χατζόπουλος 1

Ευρετήρια. Ευρετήρια. Βάσεις Δεδομένων : Ευρετήρια 1

Δεντρικά Ευρετήρια. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1

Μάθημα Βάσεις Δεδομένων ΙΙ - Ασκήσεις Επανάληψης. 01 Εκφώνηση

Βάσεις Δεδομένων 2. Φροντιστήριο Αλγόριθμοι Επεξεργασίας και Βελτιστοποίησης Επερωτήσεων. Ημερ: 27/5/2008 Ακ.Έτος

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ

ΗΥ460 Συστήματα Διαχείρισης Βάσεων Δεδομένων Χειμερινό Εξάμηνο 2016 Διδάσκοντες: Βασίλης Χριστοφίδης, Δημήτρης Πλεξουσάκης, Χαρίδημος Κονδυλάκης

Κεφ.11: Ευρετήρια και Κατακερματισμός

Οργάνωση Βάσεων Βιοϊατρικών Δεδομένων Εξόρυξη Γνώσης Βιοϊατρικών Δεδομένων. Σεμινάριο 7: Αλγόριθμοι για επεξεργασία ερωτήσεων και βελτιστοποίηση

Αποθήκευση Δεδομένων. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1

Advanced Data Indexing

Φροντιστήριο Αποθήκευση σε δίσκο, βασικές οργανώσεις αρχείων κατακερματισμός και δομές ευρετηρίων για αρχεία

Βελτιστοποίηση ερωτημάτων Βάσεις Δεδομένων Διδάσκων: Μαρία Χαλκίδη

5. Απλή Ταξινόμηση. ομές εδομένων. Χρήστος ουλκερίδης. Πανεπιστήμιο Πειραιώς Σχολή Τεχνολογιών Πληροφορικής και Επικοινωνιών Τμήμα Ψηφιακών Συστημάτων

Υλοποίηση των Σχεσιακών Τελεστών. 6/16/2009 Μ.Χατζόπουλος 1

Οργάνωση Αρχείων. Βάσεις Δεδομένων : Οργάνωση Αρχείων 1. Blobs

Εργαστήριο 6 ο 7 ο / Ερωτήματα Ι

Copyright 2007 Ramez Elmasri and Shamkant B. Navathe, Ελληνική Έκδοση, Δίαβλος, Επιμέλεια Μ.Χατζόπουλος Διαφάνεια 14-1

Πανεπιστήμιο Πειραιώς, Τμήμα Πληροφορικής

Τα δεδομένα (περιεχόμενο) μιας βάσης δεδομένων αποθηκεύεται στο δίσκο

Συστήματα Διαχείρισης Βάσεων Δεδομένων (ΗΥ460) Χειμερινό εξάμηνο 2017

Βελτιστοποίηση Ερωτημάτων Κεφ. 14

Διαδικασιακός Προγραμματισμός

Ευρετήρια. Βάσεις Δεδομένων : Ευρετήρα 1. Πρωτεύον ευρετήριο (primary index): ορισμένο στο κλειδί διάταξης του αρχείου. Ευρετήρια.

2 ο Σύνολο Ασκήσεων. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1

Kεφ.2: Σχεσιακό Μοντέλο (επανάληψη) Κεφ.6.1: Σχεσιακή Άλγεβρα

Βάσεις Δεδομένων. Αποθήκευση σε δίσκο, βασικές οργανώσεις αρχείων, κατακερματισμός και δομές ευρετηρίων για αρχεία. Φροντιστήριο 7 o

ΒΑΣΕΙΣ Ε ΟΜΕΝΩΝ. Επίπεδα Αφαίρεσης Σ Β. Αποθήκευση Εγγραφών - Ευρετήρια. ρ. Βαγγελιώ Καβακλή ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΙΓΑΙΟΥ, Επίπεδο Όψεων.

Εξωτερική Ταξινόμηση. Μ.Χατζόπουλος 1

Η SQL ως γλώσσα ερωτημάτων. Υπενθυμίζουμε: Σχέση = Πίνακας Πλειάδα = Εγγραφή = Γραμμή (Πίνακα) Πεδίο = Γνώρισμα (Σχέσης) = Στήλη (Πίνακα)

Βελτιστοποίηση επερωτημάτων

Βάσεις Δεδομένων ΙΙ Ενότητα 5

Εαρινό Εξάμηνο

Ευρετήρια. Ευρετήρια. Βάσεις εδοµένων :ευρετήρια 1

Προηγμένη Ευρετηρίαση Δεδομένων (ΠΜΣ) Ενδεικτικές ερωτήσεις-θέματα για την εξέταση της θεωρίας

Σχεσιακή Άλγεβρα Σχεδιασμός Βάσεων Δεδομένων

ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ - ΤΜΗΥΠ ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ Ι

Άσκηση 1 (ανακοινώθηκε στις 20 Μαρτίου 2017, προθεσμία παράδοσης: 24 Απριλίου 2017, 12 τα μεσάνυχτα).

BΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ ΕΞΕΤΑΣΗ (Σεπτεμβρίου)

Λύση (από: Τσιαλιαμάνης Αναγνωστόπουλος Πέτρος) (α) Το trie του λεξιλογίου είναι

Δυναμικός Κατακερματισμός. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1

Τα δεδομένα συνήθως αποθηκεύονται σε αρχεία στο δίσκο

ΤΑΞΙΝΟΜΗΣΗ ΑΠΟΤΕΛΕΣΜΑΤΩΝ ΕΡΩΤΗΜΑΤΟΣ

Α Ν Α Λ Τ Η Α Λ Γ Ο Ρ Ι Θ Μ Ω Ν Κ Ε Υ Α Λ Α Ι Ο 5. Πως υπολογίζεται ο χρόνος εκτέλεσης ενός αλγορίθμου;

Βάσεις Δεδομένων Ι Ευρετήρια/Indexes. (...και επιδόσεις ΣΔΒΔ) Views (Όψεις) Φώτης Κόκκορας (MSc/PhD) Τμήμα Τεχνολογίας Πληροφορικής & Τηλεπ/νιών

Τμήμα Πληροφορικής ΑΠΘ

Βάσεις δεδομένων. (10 ο μάθημα) Ηρακλής Βαρλάμης

Πληροφορική 2. Δομές δεδομένων και αρχείων

Αλγόριθμοι Ταξινόμησης Μέρος 4

PROJECT ΕΡΓΑΣΤΗΡΙΩΝ ΒΑΣΕΩΝ ΔΕΔΟΜΕΝΩΝ Ι. Τμήμα Μηχανικών Πληροφορικής Τ.Ε.

Οργάνωση Βάσεων Βιοϊατρικών Δεδομένων Εξόρυξη Γνώσης Βιοϊατρικών Δεδομένων. Σεμινάριο 7: Αλγόριθμοι για επεξεργασία ερωτήσεων και βελτιστοποίηση

Ευρετήρια. Το ευρετήριο αρχείου είναι ένα διατεταγµένο αρχείο µε σταθερού µήκους εγγραφές

Κεφάλαιο 14. Δομές Ευρετηρίων για Αρχεία. Copyright 2007 Ramez Elmasri and Shamkant B. Navathe Ελληνική Έκδοση,

ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ Ι. Ενότητα 6: SQL (Συζεύξεις, Εμφώλευση, Ομαδοποίηση) Ευαγγελίδης Γεώργιος. Τμήμα Εφαρμοσμένης Πληροφορικής ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ Ι

ΘΕΜΑΤΑ. Θέμα 1 ο Σύμφωνα με τους παραπάνω πίνακες και τη θέση που έχουν τα ξένα κλειδιά βρείτε τους

Αλγόριθμοι και Δομές Δεδομένων (Ι) (εισαγωγικές έννοιες)

Οργάνωση Βάσεων Βιοϊατρικών Δεδομένων Εξόρυξη Γνώσης Βιοϊατρικών Δεδομένων. Σεμινάριο 6: Δομές ευρετηρίων για αρχεία

Η SQL αποτελείται από δύο υποσύνολα, τη DDL και τη DML.

ΗΥ240: οµές εδοµένων Χειµερινό Εξάµηνο Ακαδηµαϊκό Έτος Παναγιώτα Φατούρου. Προγραµµατιστική Εργασία 3 ο Μέρος

Ευρετήρια. Πρωτεύον ευρετήριο (primary index): ορισμένο στο κλειδί διάταξης του αρχείου. Ευρετήρια. Ευρετήρια. Ευρετήρια

Ευρετήρια. Πρωτεύον ευρετήριο (primary index): ορισμένο στο κλειδί διάταξης του αρχείου. Ευρετήρια. Ευρετήρια. Ευρετήρια

Copyright 2007 Ramez Elmasri and Shamkant B. Navathe, Ελληνική Έκδοση, Δίαυλος Διαφάνεια 15-1

Μετατροπή Σχήματος Ο/Σ σε Σχεσιακό

ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ. Συστήματα Αρχείων. Διδάσκoντες: Καθ. Κ. Λαμπρινουδάκης Δρ. Α. Γαλάνη

Βάσεις Δεδομένων (Databases)

Φροντιστήριο 4. Άσκηση 1. Λύση. Πανεπιστήµιο Κρήτης, Τµήµα Επιστήµης Υπολογιστών HY463 - Συστήµατα Ανάκτησης Πληροφοριών Εαρινό Εξάµηνο

Τι είναι αλγόριθμος; Υποπρογράμματα (υποαλγόριθμοι) Βασικές αλγοριθμικές δομές

Transcript:

ΗΥ460 Συστήματα Διαχείρισης Βάσεων Δεδομένων Χειμερινό Εξάμηνο 2016 Διδάσκοντες: Βασίλης Χριστοφίδης 2 η Σειρά Ασκήσεων Ημερομηνία Παράδοσης: 14/11/2016 Άσκηση 1 (10 μονάδες) Εξωτερική Ταξινόμηση Θεωρείστε μια βάση δεδομένων που περιέχει μια σχέση R, η οποία έχει Τ πλειάδες και καταλαμβάνει B μπλοκ στο δίσκο. Υπάρχουν δύο B+-tree ευρετήρια ορισμένα στην R: ένα συσταδοποιημένο (clustered) ευρετήριο στο γνώρισμα R.a και ένα μη-συσταδοποιημένο (unclustered) ευρετήριο στο γνώρισμα R.b. Τα γνωρίσματα R.a και R.b δε συσχετίζονται μεταξύ τους. Μας ενδιαφέρει η εκτέλεση του ακόλουθου SQL ερωτήματος στην προηγούμενη βάσεων δεδομένων: select * from R order by R.b α. (5 μονάδες) Υποθέστε ένα πλάνο εκτέλεσης του ερωτήματος που περιλαμβάνει σειριακή σάρωση της R και στην συνέχεια ταξινόμηση της σχέσης στο γνώρισμα R.b χρησιμοποιώντας εξωτερική ταξινόμηση με συγχώνευση (external merge sort). Υποθέσετε ο τελεστής ταξινόμησης με συγχώνευση διαθέτει επαρκή μνήμη για να κρατά μόνο Μ μπλοκ δεδομένων, όπου Μ < Β. Ποιό είναι το κόστος Ε/Ε αυτού του πλάνου, δηλαδή πόσες λειτουργίες ανάγνωσης εγγραφής μπλοκ στο δίσκο απαιτούνται για να εκτελεστεί; Λάβετε υπόψη και το κόστος της σειριακής σάρωσης και το κόστος της ταξινόμησης. Λύση: Η σειριακή σάρωση της R θα κοστίσει Β. Η ταξινόµηση µε συγχώνευση (merge sort) απαιτεί log M-1 B/M περάσματα, κάθε ένα από τα οποία απαιτεί όλα τα δεδομένα που θα γραφτούν και θα διαβαστούν πίσω με συνολικό κόστος 2Β για κάθε πέρασμα. Επομένως το συνολικό κόστος είναι Β(1 +2 logm-1 B/M!1

Προτεινόμενη λύση 1: Εξωτερική Ταξινόμηση Η ταξινόμηση απαρτίζεται από δύο μέρη την ταξινόμηση κάθε block της σχέσης R και στην συνέχεια συγχώνευσης τους μέχρι την παραγωγή του τελικού αρχείου ταξινομημένου. Ταξινόμηση των blocks Σε αυτή τη φάση γίνεται ανάγνωση όλων των blocks της σχέσης R ταξινόμησης τους και στην συνέχεια επανεγγραφή τους στο δίσκο. Γίνεται κατάλληλη ομαδοποίηση των block της σχέσης R ώστε να μπορούν να χωρέσουν στους διαθέσιμους memory buffers, γνωστά και ως runs. Σε κάθε περίπτωση η διαδικασία αυτή γίνεται σε κάθε block της σχέσης R και κοστίζει 2 Ι/Ο για κάθε block επομένως το συνολικό κόστος θα είναι 2 * Β Ι/Ο. Συγχώνευση των sub files Σε αυτή τη διαδικασία το κόστος καθορίζεται από τον αριθμό των περασμάτων, δηλαδή σε πόσα βήματα τα επιμέρους subfiles θα συγχωνευτούν μεταξύ τους. Για να γίνει αυτό το βήμα θα γίνει χρήση M-1 memory buffers, καθώς ο τελευταίος θα χρησιμοποιηθεί ως output για τα merged file. Επομένως ο αριθμος των περασμάτων θα είναι στην δική μας περίπτωση. Κάθε πέρασμα απαιτεί την φόρτωση όλων των blocks της σχέσης R και στην συνέχεια επανεγγραφή τους στο δίσκο δηλαδή 2*B Ι/Ο. Σάρωση blocks Ο χρόνος που απαιτείται για την σάρωση όλων των πλειάδων της σχέσης R ισοδυναμεί με το χρόνο που απαιτείται για την ανάγνωση από τον δίσκο B blocks (τα blocks από τα οποία αποτελείται τη σχέση R). Επομένως το κόστος της πρώτης φάσης (σάρωση) είναι B. Συνολικά το κόστος για την εκτέλεση του παραπάνω ερωτήματος θα είναι: (άνω άκρο) β. (5 μονάδες) Υποθέστε ένα πλάνο εκτέλεσης του ερωτήματος που διαβάζει τις πλειάδες της R ταξινομημένες χρησιμοποιώντας το μη συσταδοποιημένο ευρετήριο πάνω στο R.b (index scan). Εκτιμήστε το κόστος Ε/Ε αυτού του πλάνου. Υποθέστε ότι το σύστημα έχει λανθάνουσα μνήμη (buffer cache) Μ σελίδων (Μ<Β) η οποία αρχικά περιέχει Μ από τα Β μπλοκ της σχέσης R. Λύση: Χωρίς λανθάνουσα μνήμη, η σάρωση μέσω ευρετηρίου (index scan) απαιτεί Τ Ι/Ο λειτουργίες. Με την χρήση λανθάνουσας μνήμης, αναμένουμε ότι Μ/Β πλειάδες βρίσκονται ήδη στις σελίδες μνήμης και δε θα έχουν ως αποτέλεσμα λειτουργίες Ε/Ε στον δίσκο. Επομένως μια λογική εκτίμηση του κόστους είναι: Άσκηση 2 (20 μονάδες) Αλγόριθμοι Σύζευξης Μας ενδιαφέρει η σύζευξη δύο πινάκων R και S χρησιμοποιώντας την συνθήκη R.a = S.b. Το γνώρισμα R.a είναι πρωτεύον κλειδί (primary key) του R στο οποίο έχει οριστεί ένα συσταδοποιημένο (clustered ) ευρετήριο. Το γνώρισμα S.b είναι υποψήφιο κλειδί (candidate key) του S στο οποίο δεν έχουν οριστεί ευρετήρια. Το μέγεθος σε μπλοκ του R και του S είναι ίσα: B(R) = B(S) ενώ το μέγεθος του ευρετηρίου R.a είναι πολύ μικρό σε σχέση με το B(R).!2

(α) (4 μονάδες) Υποθέστε ότι η σύζευξη εκτελείται με έναν αλγόριθμο φωλιασμένων βρόχων βασισμένο σε μπλοκ (block nested loop) με τον S εσωτερικό πίνακα και ότι είναι διαθέσιμες Μ σελίδες ενδιάμεσης μνήμης (buffer pages) όπου M < B. Δώστε μια εκτίμηση του κόστους Ε/Ε του πλάνου σε συνάρτηση με τα B και M όταν το αποτέλεσμα της σύζευξης δεν αποθηκεύεται στον δίσκο (materialized). Λύση: Η S θα διαβαστεί μία φορά, άρα θα έχει κόστος όσο και το μέγεθος της, δηλαδή Β. Η R θα διαβαστεί Β=Μ φορές με κόστος Β κάθε φορά. Άρα το συνολικό κόστος είναι: B + (B/M) B = B + B 2 /M. Στην περίπτωση που υπολογίζετε επίσης ένα input buffer και ένα output buffer αντι για Μ θεωρούμε Μ-2 (β) (4 μονάδες) Υποθέστε ότι η σύζευξη εκτελείται με έναν αλγόριθμο συγχώνευσης με ταξινόμηση (sort merge) Οι πλειάδες του R διαβάζονται διατεταγμένες χρησιμοποιώντας το συσταδοποιημένο ευρετήριο στο R.a. Ο S ταξινομείται χρησιμοποιώντας εξωτερική ταξινόμηση, το αποτέλεσμα της οποίας προωθείται σε σωλήνωση (pipelined) στην σύζευξη. Μ σελίδες ενδιάμεσης μνήμης (buffer pages) είναι διαθέσιμες, όπου B < M < B. Πόση μνήμη απαιτεί ο αλγόριθμος συγχώνευσης με ταξινόμηση και πόση η εξωτερική ταξινόμηση; Δικαιολογήστε σύντομα την απάντησή σας. Λύση: Εφόσον το R.a είναι κλειδί του R και το S.b είναι υποψήφιο κλειδί του S, δεν υπάρχουν διπλότιμες τιμές για τα κλειδιά. Σε αυτήν την περίπτωση ο αλγόριθμος συγχώνευσης χρειάζεται να κρατά μια πλειάδα από κάθε σχέση. Συνεπώς όλη ή σχεδόν όλη η διαθέσιμη μνήμη πρέπει να δοθεί στον αλγόριθμο εξωτερικής ταξινόμησης. (γ) (8 μονάδες) Εκτιμήστε το κόστος του πλάνου του ερωτήματος (β) υποθέτοντας Μ σελίδες ενδιάμεσης μνήμης σύμφωνα με την εκτίμηση που έχετε κάνει προηγουμένως. Υποθέστε ότι οι αναγνώσεις και οι εγγραφές των μπλοκ είναι το ίδιο και ότι το αποτέλεσμα της σύζευξης δεν αποθηκεύεται στον δίσκο (materialized).!3

Λύση: Για την φάση της ταξινόμησης, στην οποία θα δημιουργηθούν οι συρμοί(runs), θα διαβάσουμε την σχέση S με κόστος B και στη συνέχεια θα γράψουμε τους Β/Μ ταξινομημένους συρμούς με κόστος Β. Επειδή ισχύει B < M, προκύπτει πως το πλήθος των συρμών που έχουν παραχθεί είναι < Μ (μικρότερο από Μ), οπότε η φάση της συγχώνευσης του αλγορίθμου μπορεί να γίνει σε ένα πέρασμα. Αυτό σημαίνει ότι απαιτούνται άλλα B I/Os για το διάβασμα των συρμών(runs) και κανένα I/O για την διοχέτευση/pipelining των ταξινομημένων δεδομένων της εξόδου. Άρα το συνολικό κόστος για την εξωτερική ταξινόμηση είναι: Β+Β+Β = 3Β I/Os Η σύζευξη θα καταναλώσει τα δεδομένα εξόδου που έρχονται από την διοχέτευση/pipelining (χωρίς κόστος I/O), θα διαβάσει την σχέση R χρησιμοποιώντας το ευρετήριο/index πάνω στο γνώρισμα R.a. Εφόσον το ευρετήριο είναι συσταδοποιημένο/clustered, κάθε μπλοκ του R θα διαβαστεί μια φορά με κόστος Β. Επιπλέον, ορισμένα μπλοκ του ευρετηρίου θα πρέπει να διαβαστούν, αλλά αυτό το κόστος είναι αμελητέο εφόσον το ευρετήριο θεωρείται πολύ μικρό. Έτσι το συνολικό κόστος θα είναι 4Β. 3Β για το κόστος της εξωτερικής ταξινόμησης και Β για το κόστος ανάγνωσης της σχέσης R. (δ) (4 μονάδες) Υποθέτοντας ότι B < M < B, κάτω από ποιες συνθήκες ο αλγόριθμος φωλιασμένων βρόχων βασισμένο σε μπλοκ (block nested loop) είναι προτιμότερος από αλγόριθμο συγχώνευσης με ταξινόμηση (sort merge). Δικαιολογήστε σύντομα την απάντησή σας εκφράζοντας τις συνθήκες με όρους των B και M. Λύση: Ο αλγόριθμος φωλιασμένων βρόχων βασισμένο σε μπλοκ (block nested loop) είναι προτιμότερος από τον αλγόριθμο συγχώνευσης με ταξινόμηση (sort merge) όταν B + B 2 /M < 4B which occurs when B/3 < M Στην περίπτωση που υπολογίζετε επίσης ένα input buffer και ένα output buffer αντι για Μ θεωρούμε Μ-2 Άσκηση 3 (35 μονάδες) Βελτιστοποίηση Ερωτημάτων Σας δίνονται οι παρακάτω πίνακες με πληροφορία σχετική με φοιτητές και μαθήματα που παρακολουθούν: Student(id,name,class) Course(number,name) Enrolment(id,courseNum,grade,semester) Ένας φοιτητής μπορεί να παρακολουθήσει πολλές φορές το ίδιο μάθημα σε διαφορετικά εξάμηνα. Μας ενδιαφέρει η βελτιστοποίηση του ακόλουθου ερωτήματος SQL: SELECT * FROM Student,Enrolment,Course WHERE class = 1 AND grade = 'B' AND Student.id = Enrolment.id AND Enrolment.courseNum = Course.number!4

λαμβάνοντας υπόψη τις παρακάτω παραμέτρους: Το μέγεθος μιας σελίδας είναι 4kb. Οι πλειάδες του Student έχουν μέγεθος 400 bytes με το id να καταλαμβάνει 4 bytes. Οι πλειάδες του Course έχουν μέγεθος 200 bytes. Οι πλειάδες του Enrolment έχουν μέγεθος 100 bytes με το grade να καταλαμβάνει 1 byte. T(Student) = 10000, T(Course) = 500, T(Enrolment) = 25000 V(Student,class) = 4, V(Enrolment, grade) = 10 500 σελίδες ενδιάμεσης μνήμης (buffer pages). Δείκτες σε μπλοκ καταλαμβάνουν 5 bytes. Όλα τα B+Trees έχουν 80% κάλυψη (occupancy). Έχει οριστεί ένα πρωτεύον (primary) B+Tree ευρετήριο στο γνώρισμα class. Έχει οριστεί ένα δευτερεύον (secondary) B+Tree ευρετήριο στο γνώρισμα grade. (α) (10 μονάδες) Υπολογίστε την πιο αποδοτική σειρά εκτέλεσης των συζεύξεων του παραπάνω ερωτήματος χρησιμοποιώντας τον αλγόριθμο δυναμικού προγραμματισμού για την εύρεση του βέλτιστου λογικού πλάνου.!5

Λύση: Για να υπολογίσουμε την πιο αποδοτική σειρά εκτέλεσης των συζεύξεων χρησιμοποιούμε τον αλγόριθμο δυναμικού προγραμματισμού που περιγράφεται στις διαλέξεις. Φυσικά το πρώτο πράγμα που κάνουμε είναι να «σπρώξουμε» τις συνθήκες επιλογής/selection (πιο χαμηλά) κάτω από τον τελεστή της σύζευξης. Δηλαδή, να εκτελέσουμε τις λειτουργίες επιλογής όσο γίνεται πιο νωρίς. Η εκτίμηση του μεγέθους του αποτελέσματος της πράξης επιλογής για την σχέση Student είναι: Τ(Student)/V(Student, Class) = 2500 πλειάδες Η εκτίμηση του μεγέθους του αποτελέσματος της πράξης επιλογής για την σχέση Enrolment είναι: T(Enrolment)/V(Enrolment, Grade) = 2500 πλειάδες Άρα έχουμε: {Student} {Enrolment} {Course} Size 2500 2500 500 Cost 0 0 0 Best Plan Student Enrolment Course Στην συνέχεια, εξετάζουμε τα ζεύγη σχέσεων. Στην περίπτωση που έχουμε δύο σχέσεις με διαφορετικά μεγέθη, επιλέγουμε την μικρότερη σχέση ως εξωτερική για την σύζευξη. {Student, Enrolment} {Enrolment, Course} {Student, Course} Size 2500 2500 1250000 Cost 0 0 0 Best Plan Student! Enrolment Course! Enrolment Course! Student Μπορούμε τώρα να υπολογίσουμε την πιο βέλτιστη σειρά εκτέλεσης των συνδέσμων χρησιμοποιώντας οποιοδήποτε από τα 3 ζευγάρια και στην συνέχεια συνδέουμε την τελευταία σχέση στο τέλος. Π.χ. ((r1 r2) r3), ((r1 r3) r2) κλπ. Να θυμάστε ότι λαμβάνουμε υπόψιν μας τα left deep join plans (πλάνα αριστερού βαθιού συνδέσμου). Οπότε έχουμε: 1. (Student Enrolment) Course: Το αναμενόμενο κόστος του πλάνου είναι 2500 όσο και το μέγεθός του. 2. (Course Enrolment) Student: Το αναμενόμενο κόστος του πλάνου είναι 2500 όσο και το μέγεθός του. 3. (Course Student) Enrolment: Το αναμενόμενο κόστος του πλάνου είναι 1250000. Το μέγεθός του θα είναι 2500 πλειάδες. Παρατηρούμε ότι το 1 και το 2 κοστίζουν το ίδιο και έχουμε ισοπαλία. Άρα για να επιλέξουμε ένα από τα 2, θα λάβουμε υπόψιν μας το μέγεθος της κάθε πλειάδας. Η δεύτερη επιλογή έχει μικρότερο μέγεθος για κάθε πλειάδα καθώς κάθε πλειάδα του Course έχει μέγεθος 200 bytes ενώ κάθε πλειάδα του Student έχει μέγεθος 400bytes. (β) (25 μονάδες) Υπολογίστε το βέλτιστο πλάνο εκτέλεσης του λογικού πλάνου που δώσατε στο προηγούμενο ερώτημα θεωρώντας τους αλγορίθμους σύζευξης: φωλιασμένων βρόγχων (nested loop), σάρωση με χρήση ευρετηρίων (index joins), ταξινόμησης και συγχώνευσης (sortmerge). Υπολογίστε τον αριθμό Ε/Ε κάθε πλάνου που εξετάζεται στην απάντησή σας.!6

Λύση: Πρέπει να βρούμε ποιος είναι ο καλύτερος αλγόριθμος σύζευξης για τις δύο συζεύξεις στην επερώτηση που έχουμε. Ας εξετάσουμε πρώτα τη σύζευξη της σχέσης (Course Enrolment). Index join To Enrolment έχει μόνο ένα μη συσταδοποιημένο ευρετήριο στο γνώρισμα grade που δεν είναι μέρος του join (Enrolment.courseNum = Course.number) οπότε δεν μπορούμε να εφαρμόσουμε το σύνδεσμο ευρετηρίου ένθετου βρόχου (index-nested loop join). Στην πραγματικότητα θα μπορούσε να υπάρχει ένα Β-tree ευρετήριο στο Course.number επειδή είναι κλειδί της σχέσης Course αλλά αυτό δεν έχει αναφερθεί στην εκφώνηση της άσκησης. Nested-loop Join Η μικρότερη από τις δύο σχέσεις, η σχέση Course απαιτεί 500/20 = 25 blocks στον δίσκο. Αν υποθέσουμε ότι μπορούμε να χρησιμοποιήσουμε 26 buffer pages/ σελίδες στην ενδιάμεση μνήνη για το join, μπορούμε να διαβάσουμε όλη τη σχέση Course στη μνήμη και μετά να «σαρώσουμε» τη σχέση Enrolment μια φορά. Το ερώτημα είναι: πώς θα σαρώσουμε τη σχέση Enrolment; Εάν χρησιμοποιήσουμε το μη συσταδοποιημένο ευρετήριο στο γνώρισμα grade χρειαζόμαστε (2500 I/Os + το κόστος για να διαβαστεί το ίδιο το ευρετήριο). Εάν εκτελέσουμε ένα πλήρες «σκανάρισμα» στη σχέση Enrolment χρειαζόμαστε ceil (25000/40) = 625 I/Os. Άρα θα πραγματοποιήσουμε ένα πλήρες σκάναρισμα στην σχέση Enrolment. Το συνολικό κόστος είναι 25+625 = 650 I/Os, οπότε χρειαζόμαστε 26 buffer pages αφήνοντάς μας 474 σελίδες για το άλλο σκανάρισμα. Sort-merge Join Εφόσον και οι δύο σχέσεις είναι μικρές, μπορούμε να τις φορτώσουμε στη μνήμη και μετά να τις ταξινομήσουμε. Ο πίνακας Course θα χρειαστεί 25 σελίδες (το υπολογίσαμε παραπάνω) και ο πίνακας Enrolment θα χρειαστεί 63 σελιδες ceil(625/10) = 63 pages. Έτσι αν έχουμε 88 σελίδες στην διάθεσή μας μπορούμε να πραγματοποιήσουμε την ταξινόμηση και την συγχώνευση σε ένα πέρασμα με κόστος 650 I/Os. (όπως υπολογίσαμε και παραπάνω). Τώρα ας θεωρήσουμε τη σύζευξη μεταξύ (Course Enrolment) και Student. Πριν ξεκινήσουμε, ας υπολογίσουμε τo μέγεθος (Course Enrolment) σε περίπτωση που θέλουμε το αποτελέσμα του υπολογισμού να αποθηκευθεί σε μια προσωρινή σχέση για μετέπειτα χρήση (materialized).το μέγεθος της σχέσης είναι 2500 και το μέγεθος της γραμμής είναι 300 bytes (13/page). Άρα η προσωρινή σχέση θα χρειαστεί ceil(2500/13) = 193 σελίδες. Οπότε για την σύζευξη (Course Enrolment) Student έχουμε: Index Join Η σχέση Student έχει μόνο ένα συσταδοποιημένο ευρετήριο στο γνώρισμα class που δεν είναι μέρος του join (Enrolment.id = Student.id). οπότε δεν μπορούμε να εφαρμόσουμε το σύνδεσμο ευρετηρίου ένθετου βρόχου (index-nested loop join).στην πραγματικότητα θα μπορούσε να υπάρχει ένα Β-tree ευρετήριο στο Student.id όπως θα υπήρχε και στο Course.number (αναφέρθηκε προηγουμένως). Nested-loop Join Αν έχουμε αρκετές buffer pages, μπορούμε να αποθηκεύσουμε το αποτέλεσμα της εξωτερικής σχέσης σε μια προσωρινή σχέση και να πραγματοποιήσουμε τη σύζευξη «σκανάροντας» την εσωτερική σχέση μία φορά.όπως υπολογίσαμε και παραπάνω η ενδιάμεση σχέση θα χρειαστεί ceil(2500/13) = 193 σελίδες + 1 επιπλέον σελίδα για διαβάσουμε την σχέση Student μία φορά. Από τον υπολογισμό της πρώτης σύζευξης(join) θα έχουμε αρκετή μνήμη για να εκτελέσουμε το nested-loop join με αυτόν τον τρόπο. Το επόμενο ερώτημα είναι:πώς θα σκανάρουμε/σαρώσουμε τη σχέση Student; Αν χρησιμοποιήσουμε το συσταδοποιημένο ευρετήριο, οι 2500 πλειάδες που ψάχνουμε θα είναι συνεχόμενες, άρα θα καταλαμβάνουν 2500/10 = 250 blocks. Επίσης πρέπει να υπολογίσουμε τον αριθμό των Ι/Οs για να διαβάσουμε το ευρετήριο. Η πλήρης σάρωση της σχέσης Student θα απαιτούσε 10000/10 = 1000 I/Os. Οπότε επιλέγουμε το ευρετήριο. Για να υπολογίσουμε το κόστος του ευρετηρίου πρέπει να υπολογίσουμε πόσες καταχωρήσεις υπάρχουν σε κάθε σελίδα. Σύμφωνα με τα δεδομένα της άσκησης οι δείκτες σε μπλοκ καταλαμβάνουν 5 bytes και υποθέτουμε ότι το κλειδί (class) καταλαμβάνει 1 byte, άρα (n+(n+1))*6 <= 4096,άρα n = 681. Αν όλοι οι κόμβοι του ευρετηρίου έχουν 80% κάλυψη, θα υπάρχουν 544 καταχωρήσεις, το οποίο σημαίνει ότι θα υπάρχουν μόνο δύο φύλλα, έτσι το κόστος του ευρετηρίου θα είναι 2 Ι/Οs. Tο συνολικό κόστος είναι 250+2 = 252 I/Os και οι απαιτήσεις της μνήμης είναι 194 σελίδες. Sort-merge Join Το πρώτο πράγμα που πρέπει να ελέγξουμε είναι αν μπορούμε να φορτώσουμε και τις δύο σχέσεις στην μνήμη. Έχουμε ήδη υπολογίσει ότι η εξωτερική σχέση χρειάζεται 193 σελίδες και η σχέση Student, μετά από επιλογή/selection, χρειάζεται 250 blocks. Οπότε στο σύνολο χρειαζόμαστε 193+250 = 443 σελίδες που είναι εντός των ορίων μας. Έτσι μπορόυμε να φορτώσουμε και τις 2 σχέσεις στη μνήμη, να τις ταξινομήσουμε και να τις συγχωνεύσουμε, χωρίς να χρειάζεται να γράψουμε τους συρμούς(runs). Οπότε, το κόστος για να διαβάσουμε τη σχέση Student χρησιμοποιώντας το ευρετήριο είναι μόνο 252 I/Os. Εάν συγκρίνουμε τις απαντήσεις από τα προηγούμενα κομμάτια, φαίνεται ότι ο αλγόριθμος σύζευξης φωλιασμένων βρόγχων (nested loop join) είναι καλύτερος και για τις δύο συζεύξεις γιατί είναι «φθηνότερος», χρειάζεται 26 σελίδες στην ενδιάμεση μνήμη. Επίσης, θα μπορούσαμε να χρησιμοποιήσουμε sort-merge join για μία από τις δύο συζεύξεις με το ίδιο κόστος αλλά θα χρειαζόμασταν μεγαλύτερη ενδιάμεση μνήμη. Θα ήταν χρήσιμος να χρησιμοποιηθεί στην περίπτωση που είχαμε order by ή group by στην επερώτησή μας. Το συνολικό κόστος είναι 650+252=902 I/Os.!7

Άσκηση 4 (25 μονάδες) Εκτίμηση Στατιστικών Σας δίνονται οι παρακάτω πίνακες με πληροφορία σχετική με αθλητές στίβου και τις επιδόσεις τους σε αθλητικές διοργανώσεις : Athlete(aid, name, country) Event(eid, year, location) Result(aid, eid, time) Ένας αθλητής έχει έναν μοναδικό κωδικό (aid) καθώς και ένα όνομα (name) και την χώρα (country) με την οποία αγωνίζεται. Τα αθλητικά γεγονότα έχουν και αυτά έναν μοναδικό κωδικό (eid) καθώς και πληροφορία για τον χρόνο (year) και την τοποθεσία (location) όπου διοργανώθηκαν (για παράδειγμα 2012 Grete). Οι επιδόσεις των αθλητών σε αγωνίσματα δρόμων καταγράφεται στο γνώρισμα χρόνος (time). Τα γνωρίσματα aid και eid είναι εξωτερικά κλειδιά του πίνακα Result από τους πίνακες Athlete και Event. Θεωρήστε τα παρακάτω στατιστικά στους τρεις πίνακες της βάσης δεδομένων: B(Athlete) = 100 B(Event) = 40 B(Result) = 250 T(Athlete) = 2,000 T(Event) = 400 T(Result) = 50,000 V(Athlete, country) = 100 V(Event, year) = 50 V(Event, location) = 25 Οι πίνακες Athlete και Event είναι συσταδοποιημένοι στα πρωτεύοντα κλειδιά τους aid και eid αντιστοίχως. Ο πίνακας Result δεν είναι συσταδοποιημένος. Ο πίνακας Athlete έχει τρία B+tree ευρετήρια στα γνωρίσματα aid, name, και country. Ο πίνακας Event έχει επίσης τρία B+tree ευρετήρια στα γνωρίσματα eid, year, και location. Ο πίνακας Result έχει δύο B+ tree στα γνωρίσματα eid και aid αλλά όχι στο γνώρισμα time. Υποθέστε ότι είναι διαθέσιμη επαρκής ενδιάμεση μνήμη (M) για να κρατήσει τους πίνακες (ολικώς ή μερικώς) ώστε να χρησιμοποιηθούν αλγόριθμοι που απαιτούν ένα μόνο πέρασμα (one-pass) για την εκτέλεση όλων των ερωτημάτων SQL. Σας δίνεται το ακόλουθο λογικό πλάνο ενός ερωτήματος που εμπλέκει και τις τρεις σχέσεις : GR Crete 2012!8

(α) (5 μονάδες) Διατυπώστε ένα ερώτημα SQL το οποίο θα μπορούσε να μεταφραστεί στο λογικό πλάνο που σας δίνεται. Λύση SELECT DISTINCT a.name FROM Athlete a, Event e, Result r WHERE e.eid = r.eid AND a.aid = r.aid AND a.country = GR AND e.location = Crete AND e.year = 2012 (β) (5 μονάδες) Ποιο είναι το εκτιμώμενο κόστος του αρχικού λογικού πλάνου λαμβάνοντας υπόψη τα στατιστικά για τις σχέσεις τα οποία σας έχουν δοθεί. Κάντε τις δικές σας υποθέσεις για τους βέλτιστους φυσικούς αλγόριθμους εκτέλεσης των διάφορων σχεσιακών τελεστών του πλάνου και δώστε αριθμητικές εκτιμήσεις κόστους των ενδιάμεσων αποτελεσμάτων που το πλάνο παράγει. Λύση Στόχος εδώ είναι να υπολογίσουμε το μέγεθος των ενδιάμεσων αποτελεσμάτων, έτσι τα ενδιαφέροντα στατιστικά στοιχεία είναι ο αριθμός των πλειάδων και όχι ο αριθμός των μπλοκς ή τα φυσικά πλάνα πρόσβασης. Εφόσον το eid και το aid είναι ξένα κλειδιά στο Result, κάθε πλειάδα του Result θα κάνει join με ακριβώς μια πλειάδα στο Athlete και ακριβώς μία στο Event. Το κόστος για κάθε join είναι ο αριθμός των πλειάδων στο Τ(Result), έτσι κάθε join θα παράγει 50.000 πλειάδες. Υποθέτουμε ότι η κατανομή των τιμών στα αποτελέσματα της σύζευξης ταιριάζει με την original κατανομή των ιδιοτήτων στις διάφορες σχέσεις. Ο αριθμός των πλειάδων οι οποίες δίνονται ως είσοδος στο Select είναι T (Result) και ο αναμενόμενος αριθμός πλειάδων που θα παραχθούν ως έξοδος από το Select είναι: T (Result) / (V(Athlete, country) * V (Event, location) * V (Event, year)) = 50.000/ (100*25*50) < 1 (γ) (5 μονάδες) Προτείνεται ένα πιο αποδοτικό λογικό πλάνο από αυτό που σας δόθηκε αρχικά στην εκφώνηση που υπολογίζει τα ίδια αποτελέσματα. Σχεδιάστε το πλάνο και εξηγήστε γιατί αναμένεται να βελτιώσει το κόστος εκτέλεσης του αρχικού.!9

! Λύση GR Crete 2012 (δ) (5 μονάδες) Δώστε μια εκτίμηση του κόστους του καινούργιου πλάνου. Λύση: Ο αναμενόμενος αριθμός πλειάδων που θα παραχθούν ως έξοδος από το Select στο Event είναι: T(Event) / (V(Event,location)*V(Event,year)) which is 400/50*25 < 1 Έτσι εκτιμούμε ότι το αποτέλεσμα για αυτήν την επιλογή έχει μέγεθος 1. Ο αναμενόμενος αριθμός πλειάδων που θα παραχθούν ως έξοδος από το Select του Athlete είναι: T(Athlete) / V(Athlete, country) = 2,000 / 100 = 20 Το κόστος του join Τ(R S) πάνω σε ένα χαρακτηριστικό a εκτιμάται ότι είναι Τ(R)T(S)/ max(v(r,a), V(S,a)) Για το πρώτο join στο Result και την έξοδο από το Select στο Event έχουμε 50,000*1 / max(1, 400) = 125. Το κόστος για το δεύτερο join είναι T(1o join)t(select from A)/max(V(join,aid),V(select,aid)) = 125*20/max(2000,2000)=2500/2000 = 1.25 1 Οπότε η εκτίμηση μεγέθους για το τελικό αποτέλεσμα είναι περίπου ίδιο με το αρχικό μας πλάνο. (ε) (5 μονάδες) Ποιο είναι το βέλτιστο φυσικό πλάνο εκτέλεσης του παρακάτω λογικού πλάνου με την σειρά των συζεύξεων που προβλέπει; Η απάντησή σας θα πρέπει να περιλαμβάνει τους φυσικούς αλγορίθμους εκτέλεσης των αλγορίθμων σύζευξης (nested loop, sortmerge, hash, κλπ.) καθώς και τις μεθόδους πρόσβασης (access methods) στις πλειάδες των πινάκων που απαιτούν (sequential scan, index, κλπ..) Δώστε όλες απαραίτητες πληροφορίες για την εκτέλεση των συζεύξεων του πλάνου: για συζεύξεις με κατακερματισμό ποιός είναι ο πίνακας που χρησιμοποιείται για δημιουργήσει τον πίνακα κατακερματισμού και αυτός για την ιχνηλάτησή του (build-probe relations), για συζεύξεις με φωλιασμένους βρόγχους ποιός είναι ο εσωτερικός και ο εξωτερικός πίνακας (inner or outer relations), καθώς επίσης εάν τα ενδιάμεσα αποτελέσματα των συζεύξεων αποθηκεύονται στον δίσκο (materialized) ή προωθούνται σε!10

! σωλήνωση (pipelined). Για λόγους απλότητας υποθέστε ότι υπάρχει επαρκής ενδιάμεση μνήμη για τους αλγόριθμους σύζευξης που επιλέγεται. Δώστε μια εκτίμηση του κόστους του φυσικού πλάνου που προτείνετε σε Ε/Ε και δικαιολογήστε σύντομα γιατί είναι το βέλτιστο δυνατό. Λύση Το καλύτερο μου μπορούμε να κάνουμε είναι να χρησιμοποιήσουμε hash joins αφού όλοι οι πίνακες χωράνε στην κύρια μνήμη. Κατακερματίζουμε την σχέση Event σε ένα πίνακα με κόστος B(Event). Κατακερματίζουμε την σχέση Athlete σε ένα πίνακα με κόστος B(Athlete). Τρέχουμε τα joins παράλληλα συνδέοντας την έξοδο του 1 ου join στην είσοδο του 2 ου join. Διαβάζουμε τα περιεχόμενα του Result με κόστος B(Result). Άρα το συνολικό κόστος ισούται με B(E) + B(A) + B(R) = 40 + 100 + 250 = 390 Άσκηση 5 (12 μονάδες) Επαναδιατύπωση Ερωτημάτων (α) (4 μονάδες) Δώστε ένα φωλιασμένο ερώτημα στον πίνακα Account(#account, branch, balance) το οποίο επιστρέφει για κάθε υποκατάστημα (branch) του οποίου το όνομα αρχίζει από «Α» όλους τους καταθετικούς λογαριασμούς με το μέγιστο ποσό (balance) στο υποκατάστημα. (β) (4 μονάδες) Επαναδιατυπώστε το προηγούμενο ερώτημα χωρίς την χρήση φωλιασμένων ερωτημάτων (αποσυσχέτιση). (γ) (4 μονάδες) Με βάση το προηγούμενο παράδειγμα προτείνεται μια γενική διαδικασία για την αποσυσχέτιση ερωτημάτων.! 11

Λύση α. Το φωλιασμένο ερώτημα είναι: select S.#account from Account S where S.branch like B% and S.balance = (select max(t.balance) from account T where T.branch = S.branch) β. Το ερώτημα χωρίς την χρήση φωλιασμένων ερωτημάτων (αποσυσχέτιση) είναι: create table t1 as select branch, max(balance) from Account group by branch select #account from Account, t1 where Account.branch like B% and Account.branch = t1.branch-name and Account.balance = t1.balance γ. Γενικά θεωρείστε τις επερωτήσεις της μορφής: select from L1 where P1 and A1 op (select f(a2) from L2 where P2) όπου f είναι συγκεντρωτική συνάρτηση για γνωρίσματα A2, και op είναι κάποιος δυαδικός Boolean τελεστής. Το ερώτημα μπορεί να ξαναγραφτεί ως create table t1(v,ag2) as select V, f(a2) from L2 where P1 2 group by V select from L1, t1 where P1 and P2 2 and A1 op t1.ag2 Όπου I. V περιέχει όλα τα χαρακτηριστικά/γνωρίσματα που χρησιμοποιούνται στις επιλογές και αφορούν μεταβλητές συσχέτισης στο φωλιασμένο ερώτημα, II. κατηγόρημα P1 2 περιέχει κατηγορήματα στο P2, χωρίς επιλογές/selections που αφορούν μεταβλητές συσχέτισης III. P2 2 παρουσιάζει τις επιλογές που αφορούν τις μεταβλητές συσχέτισης. (Αν τα κατηγορήματα στο P2 2 αναφέρονται σε ονόματα σχέσεων στην L2 πρέπει να ξαναγραφτούν και να αναφέρονται στη σχέση t1).!12