ΠΑΝΕΠΙΣΗΜΙΟ ΠΕΙΡΑΙΩ ΣΜΗΜΑ ΨΗΦΙΑΚΩΝ ΤΣΗΜΑΣΩΝ ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ ΕΓΑΣΤΗΙΟ 3 ΔΕΣΡΟΙΝΑ ΡΑΡΑΚΩΝΣΤΑΝΤΙΝΟΥ dpap@unipi.gr
ΡΑΑΚΟΛΟΥΘΗΣΗ ΥΡΑΛΛΗΛΩΝ ΕΤΑΙΙΑΣ ΕΩΤΗΜΑΤΑ SQL (1/2) Δθμιοφργθςε τουσ ακόλουκουσ πίνακεσ ςτον SQL SERVER Location_ID LOCATION Regional_Group 122 NEW YORK 123 DALLAS 124 CHICAGO 167 BOSTON DEPARTMENT Department_ID Name Location_ID 10 ACCOUNTING 122 20 RESEARCH 124 30 SALES 123 40 OPERATIONS 167 2
3 ΡΑΑΚΟΛΟΥΘΗΣΗ ΥΡΑΛΛΗΛΩΝ ΕΤΑΙΙΑΣ ΕΩΤΗΜΑΤΑ SQL (2/2) JOB Job_ID Function 667 CLERK 668 STAFF 669 ANALYST 670 SALESPERSON 671 MANAGER 672 PRESIDENT
4 ΡΑΑΚΟΛΟΥΘΗΣΗ ΥΡΑΛΛΗΛΩΝ ΕΤΑΙΙΑΣ ΕΩΤΗΜΑΤΑ SQL (3/2) Employ ee_id Lastname Firstn ame EMPLOYEE Job_ID Manage r_id Hiredat e 7369 SMITH JOHN 667 7902 22-01- 2010 7499 ALLEN KEVI N 670 7698 18-10- 2002 7505 DOYLE JEAN 671 7839 31-01- 2008 7506 DENNIS LYNN 671 7839 17-7- 2012 7507 BAKER LESLI E 7521 WARK CYNT HIA 671 7839 17-8- 2005 670 7698 3-04- 2001 Salary Departi ment_id 8900 20 2100 40 870 30 3600 30 1160 40 1575 30
5 ΡΑΑΚΟΛΟΥΘΗΣΗ ΥΡΑΛΛΗΛΩΝ ΕΤΑΙΙΑΣ ΕΩΤΗΜΑΤΑ SQL (1/2) 1. Ανζκτθςε τα Employee_ID, Lastname, Department_ID για όλουσ τουσ υπαλλιλουσ και μετονόμαςε το Employee_ID ωσ ID of the employee, το Lastname ωσ Name of the employee και το Department_ID ωσ department ID 2. Ανζκτθςε όλεσ τισ λεπτομζρειεσ για τον SMITH 3. Ανζκτθςε όλα τα ςτοιχεία των υπαλλιλων που παίρνουν μιςκό μεταξφ 3000 και 4500 4. Ανζκτθςε όλα τα ςτοιχεία των υπαλλιλων που δουλεφουν ςτα τμιματα 10 ι 20 5. Ανζκτθςε όλα τα ςτοιχεία των υπαλλιλων, των οποίων το επίκετο αρχίηει με S και τελειώνει με H 6. Ανζκτθςε τα Employee_ID, Lastname, salary βάςει επικζτου ςε αφξουςα ςειρά και μετά βάςει του κωδικοφ τμιματοσ κατά φκίνουςα ςειρά.
6 ΡΑΑΚΟΛΟΥΘΗΣΗ ΥΡΑΛΛΗΛΩΝ ΕΤΑΙΙΑΣ ΕΩΤΗΜΑΤΑ SQL (2/2) 7. Ανζκτθςε τα ςτοιχεία του υπαλλιλου που παίρνει τον μεγαλφτερο μιςκό 8. Εμφάνιςε τα ςτοιχεία των υπαλλιλων που εργάηονται ςτο τμιμα Sales 9. Ανζκτθςε τα ςτοιχεία των υπαλλιλων με το δεφτερο μεγαλφτερο μιςκό 10. Ανζκτθςε τουσ υπαλλιλουσ που κερδίηουν περιςςότερα από κάκε υπάλλθλο ςτο τμιμα 30 11. Ανζκτθςε κωδικοφσ, επίκετα, μιςκοφσ, κωδικοφσ τμθμάτων για τουσ υπαλλιλουσ που κερδίηουν περιςςότερα από τον μζςο μιςκό για το τμιμα τουσ 12. Ανζκτθςε τουσ κωδικοφσ και τα επίκετα των υπαλλιλων με τα ονόματα τμθμάτων τουσ.
7 ΡΑΑΚΟΛΟΥΘΗΣΗ ΥΡΑΛΛΗΛΩΝ ΕΤΑΙΙΑΣ ΕΩΤΗΜΑΤΑ SQL - ΑΡΑΝΤΗΣΕΙΣ (1/2) 1. Select Employee_ID as id of the employee, Lastname as name", Department_ID as department id from EMPLOYEE; 2. Select * from EMPLOYEE where Lastname= SMITH ; 3. Select * from EMPLOYEE where salary between 3000 and 4500; 4. Select * from EMPLOYEE where Department_ID in (20,30); 5. Select * from EMPLOYEE where Lastname like S%H ; 6. Select Employee_ID, Lastname, Salary from EMPLOYEE order by Lastname asc, Department_ID desc;
8 ΡΑΑΚΟΛΟΥΘΗΣΗ ΥΡΑΛΛΗΛΩΝ ΕΤΑΙΙΑΣ ΕΩΤΗΜΑΤΑ SQL (2/2) 7. Select * from EMPLOYEE where Salary=(select max(salary) from EMPLOYEE); 8. Select * from EMPLOYEE where Department_ID IN (select Department_ID from DEPARTMENT where Name= SALES ); 9. Select * from EMPLOYEE where Salary=(select max(salary) from EMPLOYEE where Salary <(select max(salary) from EMPLOYEE)); 10. Select * from EMPLOYEE where Salary > all (Select Salary from EMPLOYEE where Department_ID=30); 11. Select Employee_ID, Lastname, Salary, Department_ID from EMPLOYEE where Salary > (select avg(salary) from EMPLOYEE where Department_ID=e.Department_ID); 12. Select Employee_ID, Lastname, Νame from EMPLOYEE as e, DEPARTMENT as d where e.department_id=d.department_id;
INDEXES
ΕΥΕΤΗΙΟ (INDEX) Το ευρετιριο (index) είναι ζνα αντικείμενο δεδομζνων μζςα ςτθ βάςθ δεδομζνων που καταγράφει τισ γραμμζσ του πίνακα ςε τζτοια ςειρά, ώςτε να γίνεται γριγορθ αναηιτθςθ Κάκε ευρετιριο κάκε πίνακα είναι ζνα ξεχωριςτό αντικείμενο. Τα πρωτεφοντα και τα δευτερεφοντα κλειδιά είναι αυτόματα καταχωρθμζνα ςτα ευρετιρια. Γριγορθ πρόςβαςθ ςε ευρετθριοποιθμζνεσ ςτιλεσ Κάκε ευρετιριο μπορεί να ανανεωκεί όταν μια γραμμι ανανεώνεται, γεγονόσ που ζχει ωσ αποτζλεςμα τα ευρετιρια μασ να δείχνουν τισ αλλαγζσ που ζχουν λάβει χώρα (ανανεώςεισ, προςκικεσ, διαγραφζσ). Η καλφτερθ και πιο πρακτικι μζκοδοσ είναι να ζχουμε 3 ι 4 ευρετιρια ανά πίνακα. Αν χρειάηονται και περιςςότερα, μποροφμε ανά περίπτωςθ να κάνουμε προςκικθ (add) και διαγραφι (drop) για όςο χρειάηονται. Εάν μια βάςθ δεδομζνων περιλαμβάνει ωσ επί το πλείςτον ανανεώςεισ, το καλφτερο είναι να χρθςιμοποιιςουμε όςο λιγότερα ευρετιρια γίνεται. Συγκροτθμζνα (Clustered) ευρετιρια Ανακατανζμουν τισ γραμμζσ βάςει ενόσ μοναδικοφ ευρετθρίου, ώςτε να μεγιςτοποιοφν τθν ταχφτθτα πρόςβαςθσ ςτο δίςκο.
ΡΑΑΔΕΙΓΜΑ ΕΥΕΤΗΙΩΝ Ζχουμε τον πίνακα Customer Customer ID είναι το πρωτεφον κλειδί Θζλουμε να κάνουμε αναηιτθςθ βάςει των ακολοφκων: Customer name (last, first) City, state Postal (zip) code Address Δθμιουργοφμε ευρετιρια για τα εξισ: name, city/state, zip και address Ζχουμε λοιπόν 4 ευρετιρια: αργό insert, update, delete, αλλά γριγορο lookup Εάν θ βάςθ δεδομζνων είναι αρκετά ςτακερι, τότε όλα είναι μια χαρά. ΣΥΝΤΑΞΗ create index ονομα_ευρετθρίου on πίνακασ (ςτιλθ);
ΡΑΑΔΕΙΓΜΑ ΕΥΕΤΗΙΑ (1/18) Ρολλζσ φορζσ δε φαίνεται διαφορά ςτθν ταχφτθτα των SQL επερωτιςεων όταν υπάρχουν ι όχι ευρετιρια. Οι λόγοι είναι οι εξισ: Απαιτείται πολφ μεγάλοσ αρικμόσ εγγραφών προκειμζνου να γίνει αντιλθπτι θ διαφορά. Ο SQL Server διατθρεί αυτόματα ςτατιςτικά δεδομζνα για κάκε ςτιλθ χωριςτά, τα οποία ζχουν τθν μορφι ιςτογραμμάτων και τα οποία χρθςιμοποιοφνται ωσ ευρετιρια όταν δεν ζχουν δθμιουργθκεί ρθτώσ ευρετιρια ςτισ αντίςτοιχεσ ςτιλεσ. Τα ευρετιρια βοθκοφν τον SQL Server να αναηθτιςει τα δεδομζνα πιο γριγορα. Για να καταλάβουμε γιατί είναι χριςιμα τα ευρετιρια πρζπει να ξζρουμε τα εξισ: Ο SQL Server αποκθκεφει τα δεδομζνα ςε ςελίδεσ (pages) Το μζγεκοσ τθσ ςελίδασ είναι προκακοριςμζνο -> 8KB (αν ζχουμε ζναν πίνακα που ζχει 1000B μζγεκοσ γραμμισ, μποροφμε να αποκθκεφςουμε 8 γραμμζσ ανά ςελίδα. Υπάρχουν πολλοί τφποι ςελίδων, εμείσ ασ επικεντρωκοφμε ςτισ ςελίδεσ δεδομζνων (data pages).
ΡΑΑΔΕΙΓΜΑ ΕΥΕΤΗΙΑ (2/18) Πςο πιο πολλζσ πλιρεισ ςελίδεσ δεδομζνων ζχουμε: Τόςο μεγαλφτερθ ΒΔ ζχουμε Τόςο περιςςότερο χρόνο χρειάηεται για να φτάςουμε ςε μια ςυγκεκριμζνθ γραμμι. Αν ο πίνακασ μασ δεν ζχει ευρετιρια, αυτό ςθμαίνει ότι οι γραμμζσ ςτισ ςελίδεσ δεδομζνων αποκθκεφονται χωρίσ καμία ςυγκεκριμζνθ ςειρά. Το πικανότερο είναι ότι αποκθκεφονται με τθ ςειρά με τθν οποία ειςιχκθςαν. Οπότε τα ευρετιρια χρθςιμοποιοφνται για να οργανώςουμε τισ ςελίδεσ δεδομζνων μασ.
ΡΑΑΔΕΙΓΜΑ ΕΥΕΤΗΙΑ (3/18) Clustered ευρετιριο Η λογικι ςειρά ςτο ευρετιριο ακολουκεί τθ φυςικι ςειρά των γραμμών ςτον πίνακα Ζχουμε ζνα clustered ευρετιριο ανά πίνακα Συνικωσ είναι πιο γριγορο από το non-clustered ευρετιριο. Αν πχ το customer_id χρθςιμοποιείται για ζνα clustered ευρετιριο, τα δεδομζνα κα αναταξινομθκοφν βάςθ αυτοφ του κλειδιοφ. Non-clustered ευρετιριο: Αυτά τα ευρετιρια χρθςιμοποιοφν δείκτεσ για να μασ φζρνουν τα δεδομζνα. Μποροφμε να ζχουμε παραπάνω από ζνα non-clustered ευρετιριο ανά πίνακα. Είναι πιο αργό από το clustered ευρετιριο.
ΡΑΑΔΕΙΓΜΑ ΕΥΕΤΗΙΑ (4/18) AUTOMATIC STATISTICS Οι SQL Server ΒΔ αυτόματα δθμιουργοφν και ανανεώνουν ςτατιςτικά. Ο SQL Server χρειάηεται αυτά τα ςτατιςτικά για να κάνει αποτελεςματικά το query processing. Η πλθροφορία που αποκθκεφεται περιλαμβάνει: Τον αρικμό των γραμμών και των ςελίδων που απαςχολοφνται από τα δεδομζνα του πίνακα Τθ χρονικι ςτιγμι κατά τθν οποία ανανεώκθκαν για τελευταία φορά τα ςτατιςτικά Το μζςο μικοσ των κλειδιών μιασ ςτιλθσ Ιςτογράμματα που δείχνουν τθν κατανομι των δεδομζνων ςε μια ςτιλθ Μποροφμε να δοφμε αυτά τα ςτατιςτικά ςε κάκε πίνακα του SQL Server, είτε μζςω τθσ T-SQL είτε μζςω τθσ SQL Server Management Studio διεπαφισ χριςτθ. T-SQL επιλογι: sp_helpstats indextesting, 'ALL', θ οποία δίνει μια λίςτα με όλα τα ςτατιςτικά που ζχουν αποκθκευκεί αναφορικά με ζναν ςυγκεκριμζνο πίνακα.
ΕΥΧΑΙΣΤΩ ΡΟΛΥ! 16