OtherTopics: queries.sql

File queries.sql, 2.4 KB (added by 233149, 4 days ago)
Line 
1-- Phase 9 - the queries measured for the index analysis.
2--
3-- Six of the seven come from Phase 6 (sql/reports.sql); the seventh is the
4-- application query that the professor's gradebook page issues, kept as a
5-- contrast between a report and an everyday selective query.
6--
7-- Run against the `perf` schema, which holds data of realistic size.
8-- Each query was run with EXPLAIN (ANALYZE, BUFFERS) twice: once with no
9-- extra indexes, then again after indexes.sql. The outputs are the
10-- before_*.txt / after_*.txt files next to this script.
11SET search_path TO perf;
12
13-- 1. Phase 6, report 1 - pass rate per subject and semester.
14-- before_rep_subject_pass_rate.txt / after_rep_subject_pass_rate.txt
15EXPLAIN (ANALYZE, BUFFERS) SELECT * FROM rep_subject_pass_rate();
16
17-- 2. Phase 6, report 2 - dossier of every student (p_user_id IS NULL).
18-- before_rep_student_dossier.txt / after_rep_student_dossier.txt
19EXPLAIN (ANALYZE, BUFFERS) SELECT * FROM rep_student_dossier();
20
21-- 3. Phase 6, report 3 - best student of every study programme.
22-- before_rep_top_student_per_major.txt / after_rep_top_student_per_major.txt
23EXPLAIN (ANALYZE, BUFFERS) SELECT * FROM rep_top_student_per_major();
24
25-- 4. Phase 6, report 4 - busiest professor of every active semester.
26-- before_rep_busiest_professor.txt / after_rep_busiest_professor.txt
27EXPLAIN (ANALYZE, BUFFERS) SELECT * FROM rep_busiest_professor();
28
29-- 5. Phase 6, report 5 - change of activity between consecutive semesters.
30-- before_rep_semester_growth.txt / after_rep_semester_growth.txt
31EXPLAIN (ANALYZE, BUFFERS) SELECT * FROM rep_semester_growth();
32
33-- 6. Phase 6, report 2 again, but for ONE student. Same report, selective
34-- argument - this is where an index can change the plan.
35-- before_dossier_one.txt / after_dossier_one.txt
36EXPLAIN (ANALYZE, BUFFERS) SELECT * FROM rep_student_dossier(2500);
37
38-- 7. Application query (not Phase 6): the professor's gradebook, i.e. the
39-- students enrolled in the subjects one professor teaches.
40-- before_gradebook.txt / after_gradebook.txt
41EXPLAIN (ANALYZE, BUFFERS)
42SELECT u.surname, u.name, s.name AS subject, ss.signature, ps.grade
43FROM semesters_subjects ss
44JOIN enrolled_semesters es ON es.id = ss.enrolled_semesters_id
45JOIN users u ON u.id = es.user_id
46JOIN subjects s ON s.id = ss.subjects_id
47LEFT JOIN passed_subjects ps ON ps.enrolled_id = ss.id
48WHERE ss.professor_id = 47
49ORDER BY s.name, u.surname;