Фаза 3 - Индекси и оптимизација на прашалници
View 1: v_companies_by_industry
- Примарен филтер за погледот v_companies_by_industry ќе биде според industry_name.
- Погледот се користи за преглед на компании групирани по индустрија. Перформансите се важни за течно работење на апликацијата.
- Иницијалното време за извршување на погледот е 296ms.
SELECT * FROM v_companies_by_industry WHERE industry_name = 'Information Technology';
- Execution планот покажува Seq Scan на Industry табелата, но времето е мало (0.025ms) бидејќи табелата е мала. Нема потреба од индекс. Времето изминато во извршување на операциите INSERT и UPDATE изнесува:
INSERT INTO Industry(industry_name, sector_category) VALUES('!TestIndustryAAA', '!TestSector'); -- 79ms UPDATE Industry SET sector_category = '!UpdatedSector' WHERE industry_name = '!TestIndustryAAA'; -- 64ms - Нема потреба од индексирање — сите операции во execution планот се брзи.
- Времето на извршување на операциите останува исто.
View 2: v_user_full_career
- Примарен филтер за погледот v_user_full_career ќе биде според user_id.
- Погледот се користи за преглед на целосната кариера на корисник (студии и вработување). Перформансите се важни.
- Иницијалното време за извршување на погледот е 5.356s.
SELECT * FROM v_user_full_career WHERE user_id = 2676094;
Ова не е прифатливо време па затоа пристапуваме кон индексирање.
- Најбавните операции се Parallel Seq Scan на табелите Employment (660ms) и Studies (364ms). Времето изминато во извршување на операциите INSERT и UPDATE пред индексирање изнесува:
INSERT INTO "User"(first_name, last_name, email) VALUES('Test', 'User', 'testuser111@test.com'); -- 465ms UPDATE "User" SET city = 'Skopje' WHERE email = 'testuser111@test.com'; -- 345ms - Времето изминато во извршување на query-то со индекси изнесува 55ms, и тоа е прифатливо време.
CREATE INDEX idx_employment_user_id ON Employment(user_id DESC NULLS LAST); CREATE INDEX idx_studies_user_id ON Studies(user_id DESC NULLS LAST); SELECT * FROM v_user_full_career WHERE user_id = 2676094;
Execution планот по индексирање — сите операции користат Index Scan.
- Времето изминато во извршување на операциите INSERT и UPDATE по индексирање изнесува:
INSERT INTO "User"(first_name, last_name, email) VALUES('Test2', 'User2', 'testuser222@test.com'); -- 619ms UPDATE "User" SET city = 'Kicevo' WHERE email = 'testuser222@test.com'; -- 289ms
View 3: v_student_academic_profile
- Примарен филтер за погледот v_student_academic_profile ќе биде според user_id.
- Погледот се користи за преглед на академскиот профил на студент. Перформансите се важни.
- Иницијалното време за извршување на погледот е 51ms. Ова е прифатливо време.
SELECT * FROM v_student_academic_profile WHERE user_id = 2676094;
- Execution планот покажува дека сите операции се брзи благодарение на веќе постојните индекси. Времето изминато во извршување на операциите INSERT и UPDATE изнесува:
INSERT INTO "User"(first_name, last_name, email) VALUES('Test3', 'User3', 'testuser333@test.com'); -- 466ms UPDATE "User" SET city = 'Ohrid' WHERE email = 'testuser333@test.com'; -- 50ms - Нема потреба да се преуреди прашалникот.
- Времето на извршување на операциите останува исто.
View 4: v_event_participants
- Примарен филтер за погледот v_event_participants ќе биде според event_id.
- Погледот се користи за преглед на учесници на настан. Перформансите се важни.
- Иницијалното време за извршување на погледот е 318ms.
SELECT * FROM v_event_participants WHERE event_id = 1;
- Execution планот покажува дека сите операции користат Index Scan — нема бавни операции. Времето изминато во извршување на операциите INSERT и UPDATE изнесува:
INSERT INTO Event(name, date, location, company_id) VALUES('TestEvent111', '2026-01-01', 'Skopje', 1); -- 1.389s UPDATE Event SET location = 'Berovo' WHERE name = 'TestEvent111'; -- 389ms - Нема потреба да се преуреди прашалникот.
- Времето на извршување на операциите останува исто.
View 5: v_faculty_programs
- Примарен филтер за погледот v_faculty_programs ќе биде според faculty_id.
- Погледот се користи за преглед на студиски програми по факултет. Перформансите се важни.
- Иницијалното време за извршување на погледот е 206ms. Ова е прифатливо време.
SELECT * FROM v_faculty_programs WHERE faculty_id = 1;
- Execution планот покажува Seq Scan на мали табели (University, Faculty, StudyProgram) — нема потреба од индекс. Времето изминато во извршување на операциите INSERT и UPDATE изнесува:
INSERT INTO Faculty(name, university_id) VALUES('TestFaculty111', 1); -- 310ms UPDATE Faculty SET address = 'Test Address' WHERE name = 'TestFaculty111'; -- 187ms - Нема потреба да се преуреди прашалникот.
- Времето на извршување на операциите останува исто.
View 6: v_employment_history
- Примарен филтер за погледот v_employment_history ќе биде според user_id.
- Погледот се користи за преглед на историјата на вработување на корисник. Перформансите се важни.
- Иницијалното време за извршување на погледот е 96ms. Ова е прифатливо време.
SELECT * FROM v_employment_history WHERE user_id = 2676094;
- Execution планот покажува дека сите операции користат Index Scan благодарение на индексите додадени во View 2. Времето изминато во извршување на операциите INSERT и UPDATE изнесува:
INSERT INTO "User"(first_name, last_name, email) VALUES('Test4', 'User4', 'testuser444@test.com'); -- 207ms UPDATE "User" SET city = 'Stip' WHERE email = 'testuser444@test.com'; -- 357ms - Нема потреба да се преуреди прашалникот.
- Времето на извршување на операциите останува исто.
View 7: v_user_skills
- Примарен филтер за погледот v_user_skills ќе биде според user_id.
- Погледот се користи за преглед на вештините на корисник. Перформансите се важни.
- Иницијалното време за извршување на погледот е 103ms. Ова е прифатливо време.
SELECT * FROM v_user_skills WHERE user_id = 2676094;
- Execution планот покажува дека сите операции се брзи — Index Scan и Seq Scan на мала табела Skill. Времето изминато во извршување на операциите INSERT и UPDATE изнесува:
INSERT INTO Skill(skill_name, type) VALUES('TestSkill111', '!TestType'); -- 799ms UPDATE Skill SET type = '!UpdatedType' WHERE skill_name = 'TestSkill111'; -- 235ms - Нема потреба да се преуреди прашалникот.
- Времето на извршување на операциите останува исто.
View 8: v_startups_with_founders
- Примарен филтер за погледот v_startups_with_founders ќе биде според startup_id.
- Погледот се користи за преглед на стартапи и нивните основачи. Перформансите се важни.
- Иницијалното време за извршување на погледот е 1.737s.
SELECT * FROM v_startups_with_founders WHERE startup_id = 1;
Ова не е прифатливо време па затоа пристапуваме кон индексирање.
- Најбавната операција е Parallel Index Scan на User табелата (1909ms) при Merge Join со 464778 редови. Времето изминато во извршување на операциите INSERT и UPDATE пред индексирање изнесува:
INSERT INTO "User"(first_name, last_name, email) VALUES('Test8', 'User8', 'testuser888x@test.com'); -- 51ms UPDATE "User" SET city = 'Skopje' WHERE email = 'testuser888x@test.com'; -- 81ms - Времето изминато во извршување на query-то со индекси изнесува 205ms, и тоа е прифатливо време.
CREATE INDEX idx_founder_startup_id ON Founder(startup_id); CREATE INDEX idx_founder_user_id ON Founder(user_id); SELECT * FROM v_startups_with_founders WHERE startup_id = 1;
Execution планот по индексирање — сите операции користат Index Only Scan.
- Времето изминато во извршување на операциите INSERT и UPDATE по индексирање изнесува:
INSERT INTO "User"(first_name, last_name, email) VALUES('Test8b', 'User8b', 'testuser888b@test.com'); -- 51ms UPDATE "User" SET city = 'Ohrid' WHERE email = 'testuser888b@test.com'; -- 81ms
View 9: v_students_per_program
- Примарен филтер за погледот v_students_per_program ќе биде според study_program_id.
- Погледот се користи за преглед на бројот на студенти по студиска програма. Перформансите се важни.
- Иницијалното време за извршување на погледот е 2.27s.
SELECT * FROM v_students_per_program WHERE study_program_id = 1;
Ова не е прифатливо време па затоа пристапуваме кон индексирање.
- Најбавната операција е Parallel Seq Scan на Studies табелата (361ms) со 13765 редови. Времето изминато во извршување на операциите INSERT и UPDATE пред индексирање изнесува:
INSERT INTO !StudyProgram(program_name, degree_type, duration_years, faculty_id) VALUES('TestProgram111', 'bachelor', 4, 1); -- 443ms UPDATE !StudyProgram SET duration_years = 3 WHERE program_name = 'TestProgram111'; -- 146ms - Времето изминато во извршување на query-то со индекс изнесува 119ms, и тоа е прифатливо време.
CREATE INDEX idx_studies_program_user ON Studies(study_program_id, user_id); SELECT * FROM v_students_per_program WHERE study_program_id = 1;
Execution планот по индексирање — сите операции користат Index Only Scan.
- Времето изминато во извршување на операциите INSERT и UPDATE по индексирање изнесува:
INSERT INTO !StudyProgram(program_name, degree_type, duration_years, faculty_id) VALUES('TestProgram222', 'bachelor', 4, 1); -- 371ms UPDATE !StudyProgram SET duration_years = 3 WHERE program_name = 'TestProgram222'; -- 91ms
Last modified
7 days ago
Last modified on 05/19/26 01:01:38
Note:
See TracWiki
for help on using the wiki.
