== 1. Анализа на view vw_booking_details == Погледот vw_booking_overview се користи за анализа на резервации според нивниот статус, со цел добивање комплетен преглед на сите поврзани информации за секоја резервација (гостин, соба, имот и домаќин). Во оваа операција се користи филтрирање booking_status = ‘COMPLETED’ за да се извлечат само завршените резервации. Иницијалното време за извршување на погледот е 23sec [[Image("booking query.png")]] Ова не е прифатливо време за апликацијата па затоа пристапуваме кон индексирање. [[Image("booking analysis.png")]] Со креирање на индекс {{{ create index idx_guests_user_id on guests(user_id); }}} Се добива подобрување: [[Image("index booking query.png")]] == 2. Анализа на view vw_guest_activity == Погледот vw_guest_activity се користи за анализа на активноста на гостите во системот, со цел добивање комплетен преглед на нивното однесување и интеракции. Доколку сакаме да ги прикажеме најактивните гости според број на комплетирани резервации користиме филтер completed_bookings > 3 Времето за извршување: 9 минути [[Image("guest_activity query.png")]] За оптимизација се користи Materialized View со цел да се избегнат повторливи и скапи JOIN операции со табелите bookings, reviews и favorite_listings, како и тешки агрегатни пресметки (COUNT, SUM, AVG) и групирање на големи сетови податоци. Со претходно пресметување и физичко складирање на резултатите се намалува времето на извршување и се подобрува перформансата при анализа на активноста на гостите. Времето потребно сега е: 213ms [[Image("guest_activity opt.png")]] == 3. Анализа на view vw_revenue_by_property == Овој поглед служи за анализа на приход и перформанси по недвижнина (property). Ги комбинира податоците за резервации, плаќања, локација, тип на оглас и рецензии, и дава агрегирани метрики како вкупен приход, број на резервации и просечен рејтинг. Ако сакаме да видиме заработката по сместување, извршуваме со филтер total_revenue>10 000 Време на извршување: 5 минути [[Image("revenue_by_property query.png")]] За оптимизација се користи Materialized View со цел да се избегнат скапи JOIN операции со табелите bookings и payments, како и тешки агрегатни пресметки (SUM, COUNT, AVG) и групирање над големи сетови податоци. Со претходно пресметување и физичко складирање на резултатите значително се намалува времето на извршување и се подобрува перформансата при анализа на приходите и статистиките по недвижност. Новото време на извршување: 510ms [[Image("revenue by property opt.png")]] == 4. Aнализа на vw_payment_status == Овој поглед служи за анализа на статусот на плаќањата за секоја резервација. Ги комбинира податоците од резервации, плаќања, методи на плаќање, гости, хостови и недвижнини, со цел да даде целосен преглед на секоја трансакција и нејзината финансиска состојба. Ако сакаме да видиме само успешно платени резервации, користиме филтер payment_status = ‘PAID’ Време на извршување: 16 минути [[Image("payment_status query.png")]] Ова не е прифатливо време за апликацијата па затоа пристапуваме кон индексирање [[Image("payment_status analysis.png")]] Се креира индекс {{{ create index idx_payments_status_booking on payments(payment_status, booking_id); }}} Со што имаме значително подобрување: [[Image("paymnet status index query.png")]] == 5. Aнализа на vw_host_performance == Овој поглед служи за анализа на перформансите на хостовите (домаќините) на платформата. Ги комбинира податоците за хостови, корисници, недвижнини, соби, резервации, плаќања и рецензии, и дава агрегирани метрики за секој хост. Доколку сакаме да ги анализираме најуспешните хостови, можеме да извршиме пребарување со филтер avg_rating >= 4. Време на извршување: 2 минути [[Image("host_performance query.png")]] За оптимизација се користи Materialized View со цел да се избегнат скапи JOIN операции помеѓу табелите hosts, users, properties, rooms, bookings, payments и reviews, како и комплексни агрегатни функции како COUNT(DISTINCT), SUM и AVG над големи количини на податоци. Со претходно пресметување и физичко складирање на резултатите значително се намалува времето на извршување и се подобрува перформансата при анализа на успешноста на хостовите. [[Image("host performance opt.png")]] Новото време на извршување: 389 милисекунди == 6. Aнализа на vw_room_details == Овој поглед служи за детална анализа на собите во рамки на објектите. Ги комбинира податоците за соби, нивните типови, припадните недвижнини, локацијата, хостот, како и дополнителни информации како капацитет, цени, удобности и резервации. Доколку сакаме да гледаме собите од активни објекти користиме филтер: property_status = ‘ACTIVE’ Времето: 11 минути [[Image("room_details query.png")]] Ова не е прифатливо време за апликацијата па затоа пристапуваме кон индексирање. [[Image("room details analysis.png")]] Со креирање на индекс {{{ create index idx_bookings_room_status on bookings (room_id, booking_status); }}} Новото време е 2 минути [[Image("room details index query.png")]] == 7. Анализа на vw_review_summary == Овој поглед служи за анализа на рецензиите и задоволството на гостите за секоја недвижнина. Ги комбинира податоците за рецензии, резервации, гости, хостови и локацијата на сместувањето, со цел да обезбеди детален преглед на оценките и коментарите. Ако сакаме да ги видиме само позитивните рецензии со оцена користиме филтер: rating>=4 Време на извршување: 6 минути [[Image(review_summary_quary.png)]] Ова не е прифатливо време за апликацијата па затоа пристапуваме кон индексирање. [[Image(review_summary_analysis.png)]] Со креирање на индекс {{{ create index idx_bookings_booking_id on bookings (booking_id); }}} Времето е: 10s [[Image("review_summary index query.png")]] == 8. Aнализа за vw_property_summary == Овој поглед служи за анализа и преглед на недвижнините (properties) на платформата. Ги комбинира податоците за сместувањата, нивната локација, хостовите, собите, рецензиите и политиките за откажување, со цел да обезбеди детална статистика за секоја недвижнина.Доколку сакаме да видиме недвижини кои има поголем број рецензии користиме филтер: review_count >15 Време: 1 минута [[Image("property_summary quary.png")]] Оптимизација: Погледот е претворен во Materialized View поради големиот број JOIN операции, агрегатни функции (COUNT, AVG, MIN, MAX) и обработка на милиони редови од табелите reviews и rooms. Со физичко зачувување на пресметаните резултати се избегнува повторно извршување на сложените пресметки при секое пребарување, што значително ги подобрува перформансите и го намалува оптоварувањето на базата при аналитички извештаи. Време: 134ms [[Image("property summary opt.png")]] == 9. Aнализа на vw_avalability_windows == Овој поглед служи за анализа на достапноста на собите во одредени временски периоди. Ги комбинира податоците за временските прозорци на достапност и информациите за собите, со цел да прикаже кога и кои соби се слободни за резервација Доколку сакаме да ги прикажеме сите идни достапни термини за резервација, можеме да извршиме пребарување со филтер available_date >= CURRENT_DATE. Време на извршување: 18 секунди [[Image("avalability window query.png")]] Со додавање на индекси беше забележано влошување на перформансите, при што времето на извршување се зголеми од 18 на 23 секунди. Поради тоа, заклучено е дека за овој поглед индексите не придонесуваат за подобрување на извршувањето, па затоа не се користени дополнителни индекси.