wiki:QueryOptimization

Version 4 (modified by 231085, 10 days ago) ( diff )

--

1. Анализа на view vw_booking_details

Погледот vw_booking_overview се користи за анализа на резервации според нивниот статус, со цел добивање комплетен преглед на сите поврзани информации за секоја резервација (гостин, соба, имот и домаќин). Во оваа операција се користи филтрирање booking_status = ‘COMPLETED’ за да се извлечат само завршените резервации. Иницијалното време за извршување на погледот е 23sec

Ова не е прифатливо време за апликацијата па затоа пристапуваме кон индексирање.

Со креирање на индекс

create index idx_guests_user_id on guests(user_id);

Се добива подобрување:

2. Анализа на view vw_guest_activity

Погледот vw_guest_activity се користи за анализа на активноста на гостите во системот, со цел добивање комплетен преглед на нивното однесување и интеракции. Доколку сакаме да ги прикажеме најактивните гости според број на комплетирани резервации користиме филтер completed_bookings > 3

Времето за извршување: 9 минути

За оптимизација се користи Materialized View со цел да се избегнат повторливи и скапи JOIN операции со табелите bookings, reviews и favorite_listings, како и тешки агрегатни пресметки (COUNT, SUM, AVG) и групирање на големи сетови податоци. Со претходно пресметување и физичко складирање на резултатите се намалува времето на извршување и се подобрува перформансата при анализа на активноста на гостите.

Времето потребно сега е: 213ms

3. Анализа на view vw_revenue_by_property

Овој поглед служи за анализа на приход и перформанси по недвижнина (property). Ги комбинира податоците за резервации, плаќања, локација, тип на оглас и рецензии, и дава агрегирани метрики како вкупен приход, број на резервации и просечен рејтинг. Ако сакаме да видиме заработката по сместување, извршуваме со филтер total_revenue>10 000

Време на извршување: 5 минути

За оптимизација се користи Materialized View со цел да се избегнат скапи JOIN операции со табелите bookings и payments, како и тешки агрегатни пресметки (SUM, COUNT, AVG) и групирање над големи сетови податоци. Со претходно пресметување и физичко складирање на резултатите значително се намалува времето на извршување и се подобрува перформансата при анализа на приходите и статистиките по недвижност. Новото време на извршување: 510ms

4. Aнализа на vw_payment_status

Овој поглед служи за анализа на статусот на плаќањата за секоја резервација. Ги комбинира податоците од резервации, плаќања, методи на плаќање, гости, хостови и недвижнини, со цел да даде целосен преглед на секоја трансакција и нејзината финансиска состојба. Ако сакаме да видиме само успешно платени резервации, користиме филтер payment_status = ‘PAID’ Време на извршување: 16 минути

Ова не е прифатливо време за апликацијата па затоа пристапуваме кон индексирање

Се креира индекс

create index idx_payments_status_booking on payments(payment_status, booking_id);

Со што имаме значително подобрување:

5. Aнализа на vw_host_performance

Овој поглед служи за анализа на перформансите на хостовите (домаќините) на платформата. Ги комбинира податоците за хостови, корисници, недвижнини, соби, резервации, плаќања и рецензии, и дава агрегирани метрики за секој хост. Доколку сакаме да ги анализираме најуспешните хостови, можеме да извршиме пребарување со филтер avg_rating >= 4. Време на извршување: 2 минути

За оптимизација се користи Materialized View со цел да се избегнат скапи JOIN операции помеѓу табелите hosts, users, properties, rooms, bookings, payments и reviews, како и комплексни агрегатни функции како COUNT(DISTINCT), SUM и AVG над големи количини на податоци. Со претходно пресметување и физичко складирање на резултатите значително се намалува времето на извршување и се подобрува перформансата при анализа на успешноста на хостовите.

Новото време на извршување: 389 милисекунди

6. Aнализа на vw_room_details

Овој поглед служи за детална анализа на собите во рамки на објектите. Ги комбинира податоците за соби, нивните типови, припадните недвижнини, локацијата, хостот, како и дополнителни информации како капацитет, цени, удобности и резервации. Доколку сакаме да гледаме собите од активни објекти користиме филтер: property_status = ‘ACTIVE’ Времето: 11 минути

Ова не е прифатливо време за апликацијата па затоа пристапуваме кон индексирање.

Со креирање на индекс

create index idx_bookings_room_status on bookings (room_id, booking_status);

Новото време е 2 минути

7. Анализа на vw_review_summary

Овој поглед служи за анализа на рецензиите и задоволството на гостите за секоја недвижнина. Ги комбинира податоците за рецензии, резервации, гости, хостови и локацијата на сместувањето, со цел да обезбеди детален преглед на оценките и коментарите. Ако сакаме да ги видиме само позитивните рецензии со оцена користиме филтер: rating>=4

Време на извршување: 6 минути

Ова не е прифатливо време за апликацијата па затоа пристапуваме кон индексирање.

Со креирање на индекс

create index idx_bookings_booking_id on bookings (booking_id);

Времето е: 10s

8. Aнализа за vw_property_summary

Овој поглед служи за анализа и преглед на недвижнините (properties) на платформата. Ги комбинира податоците за сместувањата, нивната локација, хостовите, собите, рецензиите и политиките за откажување, со цел да обезбеди детална статистика за секоја недвижнина.Доколку сакаме да видиме недвижини кои има поголем број рецензии користиме филтер: review_count >15 Време: 1 минута

Оптимизација: Погледот е претворен во Materialized View поради големиот број JOIN операции, агрегатни функции (COUNT, AVG, MIN, MAX) и обработка на милиони редови од табелите reviews и rooms. Со физичко зачувување на пресметаните резултати се избегнува повторно извршување на сложените пресметки при секое пребарување, што значително ги подобрува перформансите и го намалува оптоварувањето на базата при аналитички извештаи.

Време: 134ms

9. Aнализа на vw_avalability_windows

Овој поглед служи за анализа на достапноста на собите во одредени временски периоди. Ги комбинира податоците за временските прозорци на достапност и информациите за собите, со цел да прикаже кога и кои соби се слободни за резервација Доколку сакаме да ги прикажеме сите идни достапни термини за резервација, можеме да извршиме пребарување со филтер available_date >= CURRENT_DATE.

Време на извршување: 18 секунди

Со додавање на индекси беше забележано влошување на перформансите, при што времето на извршување се зголеми од 18 на 23 секунди. Поради тоа, заклучено е дека за овој поглед индексите не придонесуваат за подобрување на извршувањето, па затоа не се користени дополнителни индекси.

Attachments (21)

Download all attachments as: .zip

Note: See TracWiki for help on using the wiki.