]> git.somenet.org - pub/jan/adbs.git/blob - ex1/main_5.tex
add explanation to 1.5.a
[pub/jan/adbs.git] / ex1 / main_5.tex
1 %ex1.5
2
3 \begin{enumerate}[label=(\alph*)]
4 % (a)
5         \item
6 Optimized query:
7 \begin{verbatim}
8 SELECT distinct(displayname) FROM posts p JOIN users u ON u.id = p.owneruserid WHERE p.viewcount > u.views;
9 \end{verbatim}
10
11 Improvements:\\
12 Just converted the selection to a JOIN
13
14 Original version:
15 \begin{verbatim}
16  Planning time: 0.978 ms
17  Execution time: 86179.847 ms
18 \end{verbatim}
19
20 Optimized version:
21 \begin{verbatim}
22  Planning time: 0.960 ms
23  Execution time: 37.354 ms
24 \end{verbatim}
25
26 % (b)
27         \item
28 Optimized query:
29 \begin{verbatim}
30 SELECT score FROM comments WHERE text ILIKE 'yes\%'; <- did not work (100ms instead of 33ms)
31 \end{verbatim}
32
33 Original version:
34 \begin{verbatim}
35  Planning time: 0.540 ms
36  Execution time: 60.946 ms
37 \end{verbatim}
38
39 Optimized version:
40 \begin{verbatim}
41 TODO, current query is slower..
42 \end{verbatim}
43
44 % (b)
45         \item
46 Optimized query:
47 \begin{verbatim}
48 SELECT DISTINCT postid FROM votes WHERE postid NOT IN (SELECT postid FROM votes WHERE votetypeid != 2);
49 \end{verbatim}
50
51 Improvements:\\
52 Instead of doing about twelve million Seq Scans this is now reduces it to two Seq Scans by inverting the condition.
53
54 Original version:
55 \begin{verbatim}
56 Did not terminate. On a different machine with SSD and no time limit it took 16 minutes.
57 \end{verbatim}
58
59 Optimized version:
60 \begin{verbatim}
61  Planning time: 1.093 ms
62  Execution time: 81.776 ms
63 \end{verbatim}
64
65 % (d)
66         \item
67 Optimized query:
68 \begin{verbatim}
69 SELECT p.*, c.*, u.* FROM posts p JOIN comments c ON p.id = c.postid JOIN users u ON p.owneruserid = u.id JOIN badges b on u.id = b.userid WHERE u.upvotes+3 >= (SELECT AVG(upvotes) FROM users WHERE u.creationdate > c.creationdate) AND EXISTS (SELECT 1 FROM postlinks l WHERE l.relatedpostid > p.id) AND b.name IN ('Autobiographer','Supporter');
70 \end{verbatim}
71
72 Original version:
73 \begin{verbatim}
74  Planning time: 4.084 ms
75  Execution time: 4006.044 ms
76 \end{verbatim}
77
78 Optimized version:
79 \begin{verbatim}
80  Planning time: 2.954 ms
81  Execution time: 3081.461 ms
82 \end{verbatim}
83 \end{enumerate}