Survey
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
Lecture 4 Database Internals Database Internals Outline Front End Admission Control Connection Management Query System (sql) Parser (parse tree) Rewriter (parse tree) Planner & Optimizer (query plan) Executor Storage System Access Methods Lock Manager Buffer Pool Log Manager Start here Flattening Example Select employees in a department located in the Tech: SELECT emp.* FROM emp WHERE EXISTS ( SELECT * FROM dept WHERE emp.deptNo = dept.deptNo AND dept.building = ‘Tech’); SELECT emp.* FROM emp, dept WHERE emp.deptNo = dept.deptNo AND dept.building = ‘Tech’; Rewrite Study Break Flatten this query (departments where number of machines is more than number of employees): SELECT dept.name FROM dept WHERE dept.num-of-machines ≥ (SELECT COUNT(emp.*) FROM emp WHERE dept.name=emp.dept_name) What happens if a department has zero employees? Is this correct behavior? Answer SELECT dept.name FROM dept,emp WHERE dept.name=emp.dept_name GROUP BY dept.name HAVING dept.num-of-machines < COUNT(emp.*) SELECT dept.name FROM dept LEFT OUTER JOIN emp ON (dept.name=emp.dept_name ) GROUP BY dept.name HAVING dept.num-of-machines < COUNT(emp.*) Database Internals Outline Front End Admission Control Connection Management Query System (sql) Parser (parse tree) Rewriter (parse tree) Planner & Optimizer (query plan) Executor Storage System Access Methods Lock Manager Buffer Pool Log Manager You are here Plan Formulation emp (eno, ename, sal, dno) dept (dno, dname, bldg) kids (kno, eno, kname, bday) SELECT ename, count(*) FROM emp, dept, kids AND emp.dno=dept.dno AND kids.eno=emp.eno AND emp.sal > 50000 AND dept.name = 'eecs' GROUP BY ename HAVING count(*) > 7 Optimizer Phases • Logical • Physical • Optimizer may use – Heuristics (e.g., push down selections) – Cost modeling Data Access • Scan heap file • Index scan Query Executor • Iterative access • Enable operator composition Buffer Pool • Manages memory utilization • Acts as stepping stone between query executor and disk – Shared over all queries Study Break #2 emp (eno, ename, sal, dno) dept (dno, dname, bldg) kids (kno, eno, kname, bday) Write queries and their plans: - Calculate the number of kids associated with each dept - Find the name(s) of the employee(s) who has the most children Queries Number of kids associated with each dept: SELECT dno, dname,count(*) FROM dept,emp,kids WHERE dept.dno = emp.dno and kids.eno = emp.eno GROUP BY dept.dno,dname; Who has the most children: WITH kid_counts as (SELECT eno,count(*) as cnt FROM kids GROUP BY eno), max_kids as (SELECT MAX(cnt) as max_kid FROM kid_counts) SELECT ename FROM emp, max_kids, kid_counts WHERE emp.eno = kid_counts.eno AND kid_counts.cnt = max_kid;