Changes between Version 67 and Version 68 of QueryOptimization


Ignore:
Timestamp:
05/17/26 13:53:19 (3 weeks ago)
Author:
231027
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • QueryOptimization

    v67 v68  
    10751075}}}
    10761076
    1077 ==== Без индекс:
     1077==== 1. Примарен филтер:
     1078
     1079Примарен филтер за овој поглед е `event_id`. Овој поглед е наменет за организаторите на настани кои сакаат да видат прецизен финансиски извештај за одреден настан во реално време.
     1080
     1081==== 2. Случај на употреба:
     1082
     1083Овој поглед се користи за пресметка на чистата заработка откако ќе се одбијат сите рефундирани средства, како и за следење на профитот остварен од административните такси при рефундација. Поради комплексноста на агрегациите врз милиони редови, оптимизацијата тука е критична за да не се блокира работата на финансискиот сектор.
     1084
     1085==== 3. Иницијално време:
     1086
     1087Иницијалното време за извршување изнесува 319.320 s (околу 5.3 минути). Ова е најбавното време во целиот проект, што го прави погледот неупотреблив во реални услови без индексирање.
     1088
     1089==== 4. Анализа на планот на извршување (без индекси):
     1090
     1091Најголемиот товар паѓа на '''Parallel Seq Scan''' врз табелата `Ticket_Purchase` (над 315 s). Базата мора да ги помине сите 16 милиони записи за да ги пресмета сумите.
     1092
     1093Се користи '''Parallel Hash Join''' кој бара огромна количина на меморија и процесорска моќ за да ги поврзе трансакциите со билетите и нивните соодветни настани.
    10781094
    10791095 * '''SELECT'''
     
    11671183Овој поглед има критично време на извршување од над 5 минути поради обработка на милиони трансакции. Индексите на `ticket_id` го намалуваат времето за 99%, овозможувајќи моментален преглед на приходите и рефундациите за секој настан.
    11681184
    1169 ==== Оптимизација:
     1185==== 5. Оптимизација и индексирање:
     1186
     1187За да се овозможи побрзо филтрирање и поврзување на трансакциите, воведени се:
     1188
     1189 * `idx_ticket_purchase_ticket_id`: Клучен за брзо поврзување на трансакциите со табелата на билети.
     1190
     1191 * `idx_ticket_event_happening_id`: Овозможува базата веднаш да ги групира билетите според термините на настанот.
     1192
     1193 * `idx_ticket_refund_purchase_id`: Го забрзува '''LEFT JOIN''' делот каде што се проверува дали за одредена трансакција постои рефундација.
    11701194
    11711195{{{
     
    11821206}}}
    11831207
    1184 ==== Со индекс:
     1208==== 6. Резултат по оптимизација:
     1209
     1210Времето на извршување е намалено на 1.510 s (1510 ms).
     1211
     1212Подобрување: Ова е забрзување од 211 пати.
     1213
     1214Иако 1.5 s се уште изгледа како „многу“ во споредба со претходните погледи, за анализа на 16 милиони трансакции со комплексни '''SUM''' и '''CASE''' операции, ова е извонреден резултат.
    11851215
    11861216 * '''SELECT'''