wiki:QueryOptimization

Version 1 (modified by 231561, 6 days ago) ( diff )

--

Pink Patrol

Query and Views Optimization

View 1: v_patient_full_profile

  1. Примарен филтер за погледот v_patient_full_profile ќе биде според patient_id, а исто така ќе се користи и според ime и презиме на пациент.
  1. Примарен случај на употреба е прегледување на профилот на пациентот со неговите активни дијагнози и последниот преглед. За овој поглед ни се важни перформансите, бидејќи тој се повикува при секое отворање на картон на пациент.
  1. Иницијалното време за извршување на погледот е 4s 820ms. Ова не е прифатливо за апликацијата па затоа пристапуваме кон индексирање.

medicalsystem.public> select * from v_patient_full_profile where patient_id = 5000

[2026-05-10 10:15:22] 1 row retrieved starting from 1 in 4 s 820 ms (execution: 4 s 763 ms, fetching: 57 ms)

  1. Најбавната операција е full scan на табелата Appointment и таа може да се подобри со индекс.

create index idx_appointment_patient_id on appointment(patient_id);

  1. Времето изминато во извршување на query-то со индекси изнесува 38ms, и тоа е прифатливо време.

medicalsystem.public> select * from v_patient_full_profile where patient_id = 5000

[2026-05-10 10:20:11] 1 row retrieved starting from 1 in 38 ms (execution: 11 ms, fetching: 27 ms)

View 2: v_doctor_workload

  1. Примарен филтер за погледот v_doctor_workload ќе биде според doctor_id, а исто така ќе се користи и според специјализација и оддел.
  1. За овој поглед ни се важни перформансите, бидејќи менаџерите на одделите го користат постојано за следење на оптовареноста на докторите.

  1. Иницијалното време за извршување на погледот е 12s 340ms. Ова не е прифатливо за апликацијата па затоа пристапуваме кон индексирање.

medicalsystem.public> select * from v_doctor_workload where doctor_id = 42

[2026-05-10 10:25:33] 1 row retrieved starting from 1 in 12 s 340 ms (execution: 12 s 281 ms, fetching: 59 ms)

  1. Најбавната операција е full scan на табелата appointment и таа може да се подобри со индекс.

create index idx_medical_exam_doctor_id on medical_examination(doctor_id);

  1. Времето изминато во извршување на query-то со индекси изнесува 142ms, и тоа е прифатливо време.

medicalsystem.public> select * from v_doctor_workload where doctor_id = 42

[2026-05-10 10:30:44] 1 row retrieved starting from 1 in 142 ms (execution: 98 ms, fetching: 44 ms)

View 3: v_pharmacy_inventory_sales

  1. Примарен филтер за погледот v_pharmacy_inventory_sales ќе биде според pharmacy_id.
  1. Погледот ќе се користи од менаџерите на аптеките за контрола на залихите и приходите. За овој поглед ни се важни перформансите, бидејќи без него се губи многу време при извршување.
  1. Иницијалното време за извршување на погледот е 3s 100ms. Ова 3 е прифатливо за апликацијата па затоа не пристапуваме кон индексирање.

medicalsystem.public> select * from v_pharmacy_inventory_sales where pharmacy_id = 3

[2026-05-10 10:35:10] 1 row retrieved starting from 1 in 3 s 100 ms (execution: 3 s 051 ms, fetching: 49 ms)

  1. Нема потреба од правење план на извршување, бидејќи времето е задоволително.
  1. Нема потреба да се преуреди прашалникот.

View 4: v_appointment_daily_stats

  1. Примарен филтер за погледот v_appointment_daily_stats ќе биде според appointment_date.
  1. Погледот ќе се користи за дневна статистика на прегледи, од страна на болничката администрација. Перформансите се важни бидејќи овој поглед се повикува при секое вчитување на дашбордот.
  1. Иницијалното време за извршување на погледот е 28s 450ms. Ова не е прифатливо за апликацијата па затоа пристапуваме кон индексирање.

medicalsystem.public> select * from v_appointment_daily_stats where appointment_date = '2024-06-15'

[2026-05-10 10:45:05] 1 row retrieved starting from 1 in 28 s 450 ms (execution: 28 s 392 ms, fetching: 58 ms)

  1. Најбавната операција е full scan на табелата appointment (15 милиони редици) и таа може да се подобри со индекс на appointment_date.

create index idx_appointment_date on appointment(appointment_date);

  1. Времето изминато во извршување на query-то со индекси изнесува 1s 240ms, и тоа е прифатливо време.

medicalsystem.public> select * from v_appointment_daily_stats where appointment_date = '2024-06-15'

[2026-05-10 10:50:18] 1 row retrieved starting from 1 in 1 s 240 ms (execution: 1 s 198 ms, fetching: 42 ms)

Note: See TracWiki for help on using the wiki.