Changes between Version 66 and Version 67 of QueryOptimization


Ignore:
Timestamp:
05/17/26 13:47:06 (10 days ago)
Author:
231027
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • QueryOptimization

    v66 v67  
    863863}}}
    864864
    865 ==== Без индекс:
     865==== 1. Примарен филтер:
     866
     867Примарен филтер за овој поглед е `event_id`. Најчесто пребаруваме сумарна статистика за еден конкретен настан за да ги прикажеме ѕвездичките (рејтингот) на неговата насловна страна.
     868
     869==== 2. Случај на употреба:
     870
     871Овој поглед е клучен за почетната страна на апликацијата и пребарувањето на настани. Корисниците често ги филтрираат настаните според нивната популарност и просечна оценка. Бидејќи овие податоци се агрегираат ('''COUNT''' и '''AVG''') од илјадници рецензии, пресметката може да стане тешка операција.
     872
     873==== 3. Иницијално време:
     874
     875Иницијалното време за извршување е 1.029 s (1029 ms). Ова е на самата граница на прифатливост. Ако имаме илјадници настани со милиони рецензии, ова време би пораснало експоненцијално.
     876
     877==== 4. Анализа на планот на извршување (без индекси):
     878
     879Базата троши најмногу време на '''Bitmap Heap Scan''' врз `Event_Happening` и '''Index Scan''' врз рецензиите за да ги собере сите потребни редови за агрегација.
     880
     881Потоа користи '''GroupAggregate''' операција која мора да ги процесира сите вчитани редови за да ги пресмета просекот и вкупниот број.
    866882
    867883 * '''SELECT'''
     
    938954Пресметката на просечни оценки бара постојано агрегирање на податоци, што е бавно при секој нов приказ. Композитен индекс на (`event_happening_id`, `rating`) овозможува математичките операции да се вршат директно врз индексот, забрзувајќи го приказот на почетната страна.
    939955
    940 ==== Оптимизација:
     956==== 5. Оптимизација и индексирање:
     957
     958За да се забрза пресметката, воведуваме композитен индекс:
     959
     960 * idx_ehr_happening_id_rating: Овој индекс ги содржи и `event_happening_id` и самата оценка (rating). Ова овозможува базата да ги пресмета '''AVG''' и '''COUNT''' директно од структурата на индексот, без да мора да ги чита редовите од самата табела.
    941961
    942962{{{
     
    947967}}}
    948968
    949 ==== Со индекс:
     969==== 6. Резултат по оптимизација:
     970
     971Времето на извршување се намали на 0.459 ms.
     972
     973Подобрување: Забрзување од над 2200 пати.
     974
     975Операциите за внесување и ажурирање остануваат под 1 ms, што значи дека композитниот индекс не додава голем товар при запишување.
    950976
    951977 * '''SELECT'''