Changes between Version 6 and Version 7 of Optimization


Ignore:
Timestamp:
06/14/26 20:47:37 (8 days ago)
Author:
231184
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • Optimization

    v6 v7  
    7272Со овој индекс времето се намали од **429.479 ms** на **1.090 ms**. Индексот е многу корисен бидејќи прашалникот најчесто бара само достапни термини, па нема потреба да се пребаруваат сите термини во табелата `time_slot`.
    7373
    74 == 3. Анализа на поглед review_summary, краток преглед на рецензии за бизнис ==
    75 
    76 Овој поглед се користи за прикажување на резиме за рецензии на одреден бизнис. Во апликацијата ова може да се користи на страната на бизнисот, каде што се прикажува просечна оценка, број на рецензии или распределба на оценки.
    77 
    78 Прашалникот кој го тестираме е:
    79 
    80 {{{
    81 EXPLAIN ANALYZE
    82 SELECT *
    83 FROM review_summary
    84 WHERE business_id = 1;
    85 }}}
    86 
    87 === Време на извршување без индекс:
    88 
    89 **627.643 ms**
    90 
    91 Бидејќи прашалникот филтрира според `business_id`, а во погледот се користи и `rating`, креираме сложен индекс врз двете колони.
    92 
    93 {{{
    94 CREATE INDEX IF NOT EXISTS idx_review_business_rating_summary
    95 ON review(business_id, rating);
    96 
    97 ANALYZE review;
    98 }}}
    99 
    100 === Време на извршување со индекс:
    101 
    102 **29.151 ms**
    103 
    104 Со додавање на индексот времето се намали од **627.643 ms** на **29.151 ms**. Индексот овозможува побрзо групирање и филтрирање на рецензиите за конкретен бизнис, бидејќи податоците се организирани според `business_id` и `rating`.
    105 
    106 == 4. Анализа на поглед review_details, детални рецензии според оценка ==
     74== 3. Анализа на поглед review_details, детални рецензии според оценка ==
    10775
    10876Овој поглед се користи кога сакаме да ги прикажеме рецензиите кои имаат одредена оценка, на пример сите рецензии со оценка 5. Ова може да се користи за филтрирање на рецензии во корисничкиот интерфејс.
     
    136104Со додавање на индексот времето се намали од **800.553 ms** на **340.962 ms**. Подобрувањето е забележливо, но не е толку големо како кај претходните прашалници, бидејќи вредноста `rating = 5` може да се појавува кај голем број редици. Во таков случај индексот помага, но сепак мора да се прочита голем дел од табелата.
    137105
    138 == 5. Анализа на поглед customer_profile_view, профил на корисник со негови активности ==
     106== 4. Анализа на поглед customer_profile_view, профил на корисник со негови активности ==
    139107
    140108Овој поглед се користи за прикажување на профил на корисник, каде што можат да се прикажат неговите резервации, рецензии и други информации поврзани со активностите во системот.
     
    178146Овој индекс може да биде корисен доколку во погледот или во прашалниците често се користи сортирање или филтрирање според `created_at`. Во конкретниот тест, главното подобрување е постигнато со индексот врз `review(customer_id, rating)`.
    179147
    180 == 6. Анализа на поглед reschedule_overview, преглед на барања за промена на термин ==
     148== 5. Анализа на поглед reschedule_overview, преглед на барања за промена на термин ==
    181149
    182150Овој поглед се користи за прикажување на барања за презакажување на термини. Во апликацијата ова би се користело од страна на бизнисот или вработениот за да ги види барањата кои се во статус `pending`.
     
    228196}}}
    229197
    230 == 7. Влијание на индексите врз insert/update операции ==
     198== 6. Влијание на индексите врз insert/update операции ==
    231199
    232200Иако индексите значително го подобруваат читањето на податоците, тие можат да имаат мало влијание врз операциите за внесување и ажурирање. Причината е тоа што при секој `INSERT`, `UPDATE` или `DELETE`, базата мора да ги ажурира и индексите, не само главната табела.
     
    270238Очекувано е индексите да внесат мал трошок при запишување, но бидејќи главните сценарија во апликацијата се пребарување на слободни термини, преглед на резервации и читање на рецензии, добивката кај `SELECT` прашалниците е многу поголема од потенцијалниот трошок кај `INSERT` и `UPDATE`.
    271239
    272 == 8. Заклучок ==
     240== 7. Заклучок ==
    273241
    274242Со додавање на соодветни индекси успеавме значително да ги подобриме перформансите на најважните прашалници во системот Rezervo.
     
    279247|| customer_appointments_view || 644.544 ms || 2.756 ms ||
    280248|| available_slots || 429.479 ms || 1.090 ms ||
    281 || review_summary || 627.643 ms || 29.151 ms ||
    282249|| review_details || 800.553 ms || 340.962 ms ||
    283250|| customer_profile_view || 708.985 ms || 0.767 ms ||