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