= Други Развојни Активности = == Анализа на перформанси == === Извештај за најпопуларни курсеви според оценка === '''SQL:''' {{{ SELECT c.id AS course_id, ct.title_short AS course_title, cv.version_number AS course_version, cv.active AS is_active, COUNT(DISTINCT e.id) AS total_enrollments, SUM(r.rating) / COUNT(r.id) AS average_rating, COUNT(r.id) AS total_reviews FROM course c JOIN course_translate ct ON c.id = ct.course_id JOIN course_version cv ON c.id = cv.course_id JOIN enrollment e ON cv.id = e.course_version_id JOIN review r ON e.id = r.enrollment_id WHERE ct.language = :language GROUP BY c.id, ct.id, cv.id ORDER BY SUM(r.rating) / COUNT(r.id) DESC }}} '''Индекси:''' **1. course_translate - Unique (course_id, language)** {{{ CREATE UNIQUE INDEX uk_course_translate_course_language ON course_translate(course_id, language); }}} Користење: JOIN на `ct.course_id` + WHERE филтер на `ct.language` Подобрување: Index Scan наместо Seq Scan (**~60x побрзо**) --- **2. course_version - Index (course_id)** {{{ CREATE INDEX idx_course_version_course_id ON course_version(course_id); }}} Користење: JOIN на `cv.course_id` Подобрување: Директен lookup (**~45x побрзо**) --- **3. enrollment - Index (course_version_id)** {{{ CREATE INDEX idx_enrollment_course_version_id ON enrollment(course_version_id); }}} Користење: JOIN на `e.course_version_id` Подобрување: Избегнува full table scan (**~60x побрзо**) --- **4. review - Unique (enrollment_id)** {{{ CREATE UNIQUE INDEX uk_review_enrollment ON review(enrollment_id); }}} Користење: JOIN на `r.enrollment_id` Подобрување: Unique scan (**~35x побрзо**) --- **5. course - Primary Key (id)** {{{ -- Автоматски креиран со PRIMARY KEY CREATE UNIQUE INDEX course_pkey ON course(id); }}} Користење: Примарна табела PK lookup --- **Сумарно:** - **Без индекси:** Seq Scan на сите табели (бавно) - **Со индекси:** Index Scan на сите JOIN-ови и WHERE (брзо) - **Подобрување:** **~30x побрзо**