Changes between Initial Version and Version 1 of QueryOptimization


Ignore:
Timestamp:
05/20/26 14:21:10 (6 days ago)
Author:
231561
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • QueryOptimization

    v1 v1  
     1= ''**Pink Patrol**''
     2
     3== Query and Views Optimization
     4
     5=== View 1: v_patient_full_profile
     6
     71. Примарен филтер за погледот v_patient_full_profile ќе биде според patient_id, а исто така ќе се користи и според ime и презиме на пациент.
     8
     92. Примарен случај на употреба е прегледување на профилот на пациентот со неговите активни дијагнози и последниот преглед. За овој поглед ни се важни перформансите, бидејќи тој се повикува при секое отворање на картон на пациент.
     10
     113. Иницијалното време за извршување на погледот е 4s 820ms. Ова не е прифатливо за апликацијата па затоа пристапуваме кон индексирање.
     12
     13''medicalsystem.public> select * from v_patient_full_profile where patient_id = 5000''
     14
     15''[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)''
     16
     174. Најбавната операција е full scan на табелата Appointment и таа може да се подобри со индекс.
     18
     19''create index idx_appointment_patient_id on appointment(patient_id);''
     20
     215. Времето изминато во извршување на query-то со индекси изнесува 38ms, и тоа е прифатливо време.
     22 
     23''medicalsystem.public> select * from v_patient_full_profile where patient_id = 5000''
     24
     25''[2026-05-10 10:20:11] 1 row retrieved starting from 1 in 38 ms (execution: 11 ms, fetching: 27 ms)''
     26
     27=== View 2: v_doctor_workload
     28
     291. Примарен филтер за погледот v_doctor_workload ќе биде според doctor_id, а исто така ќе се користи и според специјализација и оддел.
     30
     312. За овој поглед ни се важни перформансите, бидејќи менаџерите на одделите го користат постојано за следење на оптовареноста на докторите.
     32 
     333. Иницијалното време за извршување на погледот е 12s 340ms. Ова не е прифатливо за апликацијата па затоа пристапуваме кон индексирање.
     34
     35''medicalsystem.public> select * from v_doctor_workload where doctor_id = 42 ''
     36
     37''[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) ''
     38 
     394. Најбавната операција е full scan на табелата appointment и таа може да се подобри со индекс.
     40
     41''create index idx_medical_exam_doctor_id on medical_examination(doctor_id); ''
     42
     435. Времето изминато во извршување на query-то со индекси изнесува 142ms, и тоа е прифатливо време.
     44 
     45''medicalsystem.public> select * from v_doctor_workload where doctor_id = 42 ''
     46
     47''[2026-05-10 10:30:44] 1 row retrieved starting from 1 in 142 ms (execution: 98 ms, fetching: 44 ms)''
     48
     49=== View 3: v_pharmacy_inventory_sales
     50
     511. Примарен филтер за погледот v_pharmacy_inventory_sales ќе биде според pharmacy_id.
     52
     532. Погледот ќе се користи од менаџерите на аптеките за контрола на залихите и приходите. За овој поглед ни се важни перформансите, бидејќи без него се губи многу време при извршување.
     54
     553. Иницијалното време за извршување на погледот е 3s 100ms. Ова 3 е прифатливо за апликацијата па затоа не пристапуваме кон индексирање.
     56
     57''medicalsystem.public> select * from v_pharmacy_inventory_sales where pharmacy_id = 3 ''
     58
     59''[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) ''
     60
     614. Нема потреба од правење план на извршување, бидејќи времето е задоволително. 
     62
     635. Нема потреба да се преуреди прашалникот. 
     64
     65=== View 4: v_appointment_daily_stats
     66
     671. Примарен филтер за погледот v_appointment_daily_stats ќе биде според appointment_date.
     68
     692. Погледот ќе се користи за дневна статистика на прегледи, од страна на болничката администрација. Перформансите се важни бидејќи овој поглед се повикува при секое вчитување на дашбордот.
     70
     713. Иницијалното време за извршување на погледот е 28s 450ms. Ова не е прифатливо за апликацијата па затоа пристапуваме кон индексирање.
     72
     73''medicalsystem.public> select * from v_appointment_daily_stats where appointment_date = '2024-06-15' ''
     74
     75''[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) ''
     76 
     774. Најбавната операција е full scan на табелата appointment (15 милиони редици) и таа може да се подобри со индекс на appointment_date.
     78
     79'' create index idx_appointment_date on appointment(appointment_date); ''
     80
     815. Времето изминато во извршување на query-то со индекси изнесува 1s 240ms, и тоа е прифатливо време.
     82
     83'' medicalsystem.public> select * from v_appointment_daily_stats where appointment_date = '2024-06-15' ''
     84
     85'' [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) ''