| Version 1 (modified by , 4 days ago) ( diff ) |
|---|
Индекси и оптимизација на прашалници
View1: My bookings
- Примарен филтер за погледот
vw_my_bookingsќе биде според id на корисникот, а може да се користи и дополнително со име на миленичето. - Примарен случај на употреба ќе е преглед на сите резервации кои ги има направено корисник. За овој поглед ни се важни перформансите, бидејќи ќе биде користен секојдневно од клиенти. Иницијалното време за извршување на погледот е 5s 356ms.
SELECT * FROM vw_my_bookings WHERE customer_id = 100286 ORDER BY reservation_date DESC; -- 500 rows retrieved starting from 1 in 5 s 356 ms -- (execution: 4 s 952 ms, fetching: 404 ms)
- Ова не е прифатливо време за апликацијата и query-то не може понатаму да се оптимизира со менување на логиката, па затоа пристапуваме кон индексирање.
- Се приметува дека главниот проблем е Full Scan на табелата
reservationиpayment, и бидејќи и правиме join прекуpet_idнаreservationи join прекуreservation_idнаpayment, можеме да ја индексираме по тие податоци.
CREATE INDEX idx_payment_reservation_id ON Payment (reservation_id); CREATE INDEX idx_petID_reservation ON reservation(pet_id);
- Со помош на овие индекси времето за извршување значително се намалува на 2s 665ms.
SELECT * FROM vw_my_bookings WHERE customer_id = 100286 ORDER BY reservation_date DESC; -- 500 rows retrieved starting from 1 in 2 s 665 ms -- (execution: 2 s 283 ms, fetching: 382 ms)
View2: Pending actions
- Примарен филтер за погледот
vw_my_pending_actionsќе биде според id на корисникот. - Примарен случај на употреба ќе е преглед на сите идни резервации кои сеуште ги нема потврдено ("pending") или кои сеуште ги нема платено. За овој поглед ни се важни перформансите, бидејќи ќе биде користен секојдневно од клиенти. Иницијалното време за извршување на погледот е 6s 949ms.
SELECT * FROM vw_my_pending_actions WHERE customer_id = 100286; -- 100 rows retrieved starting from 1 in 6 s 949 ms -- (execution: 6 s 617 ms, fetching: 332 ms)
- Ова не е прифатливо време за апликацијата и query-то не може понатаму да се оптимизира со менување на логиката, па затоа пристапуваме кон индексирање.
- Се забележува дека главниот проблем е Full Scan на табелата
reservationиpayment, и бидејќи и правиме join прекуpet_idнаreservationи join прекуreservation_idнаpayment, можеме да ја индексираме по тие податоци.
CREATE INDEX idx_payment_reservation_id ON Payment (reservation_id); CREATE INDEX idx_petID_reservation ON reservation(pet_id);
- Со помош на овој индекс времето за извршување значително се намалува на 2s 794ms.
SELECT * FROM vw_my_pending_actions WHERE customer_id = 100286; -- 100 rows retrieved starting from 1 in 2 s 794 ms -- (execution: 2 s 455 ms, fetching: 339 ms)
View3: Room Occupancy
- Примарен филтер за погледот
vw_room_occupancyќе биде споредcheck_in_dateиcheck_out_date, а може да се користи и дополнително со име на хотел. - Примарен случај на употреба ќе е преглед на статусот на сите соби. За овој поглед ни се важни перформансите, бидејќи ќе биде користен секојдневно од клиенти. Иницијалното време за извршување на погледот е 3s 108ms.
SELECT * FROM vw_room_occupancy WHERE check_in_date >= '2024-01-01' AND check_out_date <= '2024-01-31'; -- 500 rows retrieved starting from 1 in 3 s 108 ms -- (execution: 2 s 770 ms, fetching: 338 ms)
- Ова не е прифатливо време за апликацијата, ама query-то може понатаму да се оптимизира со менување на логиката, со тоа што го изоставаме името на миленичето за кое е направена резервацијата бидејќи сметаме дека главната функционалност е да се прегледа статусот на собата.
- Со наведените оптимизации времето на извршување е 441ms.
SELECT * FROM vw_room_occupancy WHERE check_in_date >= '2024-01-01' AND check_out_date <= '2024-01-31'; -- 500 rows retrieved starting from 1 in 441 ms -- (execution: 60 ms, fetching: 381 ms)
View4: Pet Profile
- Примарен филтер за погледот
vw_pet_profileќе биде споредpet_id. - Примарен случај на употреба ќе е преглед на профилот на милениче. За овој поглед ни се важни перформансите, бидејќи ќе биде користен секојдневно од клиенти. Иницијалното време за извршување на погледот е 369ms.
SELECT * FROM vw_pet_profile WHERE pet_id = 80; -- 1 row retrieved starting from 1 in 369 ms -- (execution: 12 ms, fetching: 357 ms)
- Ова е прифатливо време за апликацијата и поради тоа нема потреба од оптимизации.
View5: Reservation Financials
- Примарен филтер за погледот
vw_reservation_financialsќе биде споредreservation_date. - Примарен случај на употреба ќе е преглед на профитот во одреден датум или период. За овој поглед не ни се важни перформансите, бидејќи е аналитички поглед кој не е наменет за секојдневна употреба од корисници.
SELECT * FROM vw_reservation_financials -- analitika WHERE reservation_date = CURRENT_DATE; -- 500 rows retrieved starting from 1 in 6 m 31 s 843 ms -- (execution: 6 m 31 s 483 ms, fetching: 360 ms)
- Погледот се извршува 6m 31s 843ms. Ова е прифатливо време за извршување поради тоа што е аналитички поглед, нема потреба од оптимизации.
View6: Today's check-ins and check-outs
- Примарен филтер за погледот
vw_todays_checkins_checkoutsќе биде споредhotel_name. - Примарен случај на употреба ќе е преглед на профитот на одреден датум. За овој поглед не ни се важни перформансите, бидејќи е аналитички.
SELECT * FROM vw_todays_checkins_checkouts WHERE hotel_name = 'Paw Palace'; -- 500 rows retrieved starting from 1 in 974 ms -- (execution: 579 ms, fetching: 395 ms)
- Погледот се извршува 974ms. Ова е прифатливо време за извршување, нема потреба од оптимизации.
View7: Available rooms
- Примарен филтер за погледот
vw_available_roomsќе биде споредdate. - Примарен случај на употреба ќе е преглед на достапност на собите за одреден временски период.
SELECT * FROM vw_available_rooms WHERE date > '2026-07-10' AND date < '2026-07-22' ORDER BY room_number; -- 8 rows retrieved starting from 1 in 467 ms -- (execution: 16 ms, fetching: 451 ms)
- Погледот се извршува 467ms. Ова е прифатливо време за извршување, поради тоа нема потреба од оптимизации.
View8: Service schedule
- Примарен филтер за погледот
vw_service_scheduleќе биде споредdate. - Примарен случај на употреба ќе е преглед на сервисите кои треба да се извршени од вработените во одреден временски период.
SELECT * FROM vw_service_schedule WHERE scheduled_date = CURRENT_DATE; -- 500 rows retrieved starting from 1 in 512 ms -- (execution: 149 ms, fetching: 363 ms)
- Погледот се извршува 512ms. Ова е прифатливо време за извршување, поради тоа нема потреба од оптимизации.
View9: Medical history
- Примарен филтер за погледот
vw_medical_historyќе биде споредpet_id. - Примарен случај на употреба ќе е преглед на медицинска историја на одредено милениче.
SELECT * FROM vw_medical_history WHERE pet_id = 67890 ORDER BY record_date DESC;
- Погледот се извршува 490ms. Ова е прифатливо време за извршување, поради тоа нема потреба од оптимизации.
View10: Employee workload
- Примарен филтер за погледот
vw_employee_workloadќе биде споредemployee_id. - Примарен случај на употреба ќе е преглед на колку работа има извршено даден вработен во одреден период.
SELECT * FROM vw_employee_workload WHERE employee_id = 7; -- 500 rows retrieved starting from 1 in 861 ms -- (execution: 527 ms, fetching: 334 ms)
- Погледот се извршува 861ms. Ова е прифатливо време за извршување, поради тоа нема потреба од оптимизации.
View11: Top customers
- Примарен филтер за погледот
vw_top_customersќе биде споредhotel_name. - Примарен случај на употреба ќе е преглед на кои корисници најмногу пари имаат потрошено. За овој поглед не ни се важни перформансите, бидејќи е аналитички.
SELECT * FROM vw_top_customers WHERE hotel_name = 'Paw Palace'; -- 500 rows retrieved starting from 1 in 4 s 703 ms -- (execution: 4 s 373 ms, fetching: 330 ms)
- Погледот се извршува 4s 703ms. Ова е прифатливо време за извршување поради тоа што е аналитички поглед, нема потреба од оптимизации.
View13: Guest stay summary
- Примарен филтер за погледот
vw_guest_stay_summaryќе биде споредpet_id. - Примарен случај на употреба ќе е преглед на престој на милениче.
SELECT * FROM vw_guest_stay_summary WHERE pet_id = 8 ORDER BY check_in_date DESC; -- 400 rows retrieved starting from 1 in 493 ms -- (execution: 32 ms, fetching: 461 ms)
- Погледот се извршува 493ms. Ова е прифатливо време за извршување, нема потреба од оптимизации.
Attachments (1)
-
Индексирање-документација.pdf
(485.0 KB
) - added by 4 days ago.
PDF оптимизирање на прашалници
Download all attachments as: .zip
Note:
See TracWiki
for help on using the wiki.
