Files
G4G0-1/Semester 2/Database Systems/Week 10/Week 10 Database Systems.md

77 lines
3.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Query Optimisation Revision
1. Obtaining the desired information from a database system in a predictable and reliable fashion is Query Processing. Getting these results back in a timely manner deals with the technique of Query Optimization.
2. r(rID, rName, rDescription), 5000 tuples.
tuple header(24b)
rID(6b)
rName(10b)
rDescription(100b)
Disc Block(1024b)
Disc Block Header(24b)
Block Space 1000b
1. (24+6+10+100)=140b
We can fit 7 tuples in 1 block.
5000/7 = 715 blocks required.
2. (24+6+10) = 40b
25 tuples per block
5000/25 = 200 blocks required.
3. Since the projection uses significantly less blocks, we access the disc less in queries compared to using every attribute. 715/200 = 3.6x less disc block accesses.
3. Write relational algebra expressions for the following SQL query.
SELECT lecturers.name, students.name, courses.name
FROM lecturers, students, assessors, courses
WHERE lecturers.lid=assessors.lid
AND students.sid=assessors.sid
AND students.cid=courses.cid
AND courses.cid=“CS”;
π lecturers.name, students.name, courses.name (
σ courses.cid = "CS" (
lecturers ⨝ (
assessors ⨝ (
students ⨝ courses))))
Or,
π lecturers.name, students.name, courses.name
(σ lecturers.lid=assessors.lid
(σ students.sid=accessors.sid
(σ courses.cid=students.did
(σ courses.cid='CS'(courses\*students)
)\* assessors
)\* lecturers
)
1. Draw query tree
4. List heuristics that optimisers apply to reduce cost of optimisation.
- Begin with initial query tree for SQL
- Move SELECT operations down the tree
- Apply more restrictive SELECT operations first ( eg. equalities before range queries )
- Replace Cartesian products followed by selection with theta joins ( eg. *sigma(f) ( RxS )* -> *R theta(f) S* )
- Move PROJECT operations down the query tree ( add project operations as inputs to theta joins ).
5. Draw a near optimal query tree for the following:
SELECT hotels.name
FROM hotels, ratings
WHERE hotels.rid=ratings.rid
AND hotels.hid=10
AND ratings.rating>7;
1. Write relational algebra expressions for this tree
# Precedence Graphs Revision
1. State True / False
1. A transaction in which all steps must be completed successfully or none of them will be completed is called a durable transaction.
False, this is the definition of an atomic transaction
2. Two-phased locking can be used to ensure that transactions are serializable
True
3. Although two transactions may be correct in themselves, interleaving of operations may produce an incorrect result.
True
4. Transactions should be written to the log before they are applied to the database itself.
True
2. Consider the following precedence graph for a non-serial schedule consisting of four transactions. Is the corresponding schedule conflict serializable? Justify your answer. If it is conflict-serializable give a corresponding serial schedule.
![](Pasted%20image%2020240319160609.png)
The following is serialisable, since there are no cycles in the precedence graph. T1, T2, T3, T4.
3. For each of the schedules shown in Table 36.1, draw a precedence graph, determine whether it is conflict serializable and justify your answer.
![](Pasted%20image%2020240319161202.png)
![](Pasted%20image%2020240319162824.png)
Not serialisable, directed cycle in graph.
![](Pasted%20image%2020240319163053.png)
Not serialisable, directed cycle in graph