Changes between Version 59 and Version 60 of QueryOptimization
- Timestamp:
- 05/17/26 13:15:00 (9 days ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
QueryOptimization
v59 v60 21 21 }}} 22 22 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), што укажува на комплексност во резолвирањето на релациите без соодветни патеки. 24 42 25 43 * '''SELECT''' … … 87 105 Погледот е бавен поради комплексни врски помеѓи четири табели што резултира со време од 3.2 s. Индексите на `performer_id` и `event_id` го елиминираат целосното скенирање на табелите и овозможуваат инстантно поврзување на изведувачите со нивните настани. 88 106 89 ==== Оптимизација: 107 ==== 5. Оптимизација и индексирање: 108 109 За да го решиме проблемот, воведуваме индекси на колоните кои служат за поврзување во '''JOIN''' условите и во '''WHERE''' филтрите: 110 111 * `idx_ehp_performer_id` и `idx_ehp_happening_id` на табелата што ги врзува изведувачите со термините. 112 113 * `idx_event_happening_event_id` за побрзо поврзување на конкретниот термин со името на настанот. 90 114 91 115 {{{ … … 100 124 }}} 101 125 102 ==== Со индекс: 126 ==== 6. Резултат по оптимизација: 127 128 По додавањето на индексите, времето на извршување на '''SELECT''' се намали на 0.533ms. 129 130 Подобрување: Ова е забрзување од над 6000 пати. 131 132 Операциите за '''INSERT''' и '''UPDATE''' сега се извршуваат за помалку од 1ms, што значи дека индексите не го забавуваат системот, туку помагаат дури и кај тригерите за '''Foreign Keys'''. 103 133 104 134 * '''SELECT'''
