Changes between Version 59 and Version 60 of QueryOptimization


Ignore:
Timestamp:
05/17/26 13:15:00 (9 days ago)
Author:
231027
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • QueryOptimization

    v59 v60  
    2121}}}
    2222
    23 ==== Без индекс:
     23==== 1. Примарен филтер:
     24
     25Примарен филтер за овој поглед ќе биде според `performer_id` (ID на изведувач), бидејќи најчестото пребарување е за да се видат настапите на конкретен изведувач. Дополнително, ќе може да се пребарува и по `event_id`.
     26
     27==== 2. Случај на употреба:
     28
     29Овој поглед е клучен за корисничкиот дел од апликацијата, каде што корисниците пребаруваат каде и кога настапува нивниот омилен изведувач. Бидејќи ова е акција што често се повторува од многу корисници истовремено, перформансите мора да бидат на високо ниво за да се обезбеди добро корисничко искуство.
     30
     31==== 3. Иницијално време:
     32
     33Иницијалното време за извршување на погледот изнесува 3.249s (3249ms). Ова е исклучително бавно и неприфатливо за една веб-апликација, каде што секој одзив над 500ms се смета за критичен.
     34
     35==== 4. Анализа на планот на извршување (Без индекси):
     36
     37Иако базата се обидува да користи постоечки '''Primary Key''' индекси, главниот проблем се јавува во спојувањето на четирите табели `Performer`, `Event_Happening_Performer`, `Event_Happening`, `Event`.
     38
     39Најбавниот дел е кај '''Nested Loop''' операциите и проверката на '''Foreign Keys''' при '''INSERT''' (1.424s).
     40
     41Времето на планирање е исто така високо (1.8s), што укажува на комплексност во резолвирањето на релациите без соодветни патеки.
    2442
    2543 * '''SELECT'''
     
    87105Погледот е бавен поради комплексни врски помеѓи четири табели што резултира со време од 3.2 s. Индексите на `performer_id` и `event_id` го елиминираат целосното скенирање на табелите и овозможуваат инстантно поврзување на изведувачите со нивните настани.
    88106
    89 ==== Оптимизација:
     107==== 5. Оптимизација и индексирање:
     108
     109За да го решиме проблемот, воведуваме индекси на колоните кои служат за поврзување во '''JOIN''' условите и во '''WHERE''' филтрите:
     110
     111 * `idx_ehp_performer_id` и `idx_ehp_happening_id` на табелата што ги врзува изведувачите со термините.
     112
     113 * `idx_event_happening_event_id` за побрзо поврзување на конкретниот термин со името на настанот.
    90114
    91115{{{
     
    100124}}}
    101125
    102 ==== Со индекс:
     126==== 6. Резултат по оптимизација:
     127
     128По додавањето на индексите, времето на извршување на '''SELECT''' се намали на 0.533ms.
     129
     130Подобрување: Ова е забрзување од над 6000 пати.
     131
     132Операциите за '''INSERT''' и '''UPDATE''' сега се извршуваат за помалку од 1ms, што значи дека индексите не го забавуваат системот, туку помагаат дури и кај тригерите за '''Foreign Keys'''.
    103133
    104134 * '''SELECT'''