Changes between Version 62 and Version 63 of QueryOptimization


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

--

Legend:

Unmodified
Added
Removed
Modified
  • QueryOptimization

    v62 v63  
    423423}}}
    424424
    425 ==== Без индекс:
     425==== 1. Примарен филтер:
     426
     427Примарен филтер за овој поглед е `user_id`. Ова е најчестото сценарио бидејќи погледот служи за корисникот да ја види сопствената историја на купени билети и нивниот статус (дали се рефундирани или не).
     428
     429==== 2. Случај на употреба:
     430
     431Погледот се користи во делот My Tickets на профилот на секој регистриран корисник. Ова е критична точка на интеракција; корисникот очекува веднаш да ги добие своите билети за да може да го прикаже QR-кодот при влез на настан. Секое доцнење тука предизвикува директен застој на влезните капии.
     432
     433==== 3. Иницијално време:
     434
     435Иницијалното време за извршување изнесува 443.784ms. Иако ова изгледа брзо во споредба со претходните погледи, треба да се земе предвид дека во реална околина со илјадници истовремени корисници, ова време ќе ескалира и ќе ја преоптовари базата.
     436
     437==== Анализа на планот на извршување (без индекси):
     438
     439Главниот проблем е идентификуван кај табелата `Ticket_Purchase`:
     440
     441 * Се извршува '''Parallel Seq Scan''' врз 3.2 милиони записи.
     442
     443 * Базата троши 389ms само за да ги прелиста сите трансакции и да ги најде оние што му припаѓаат на `user_id = 1`.
    426444
    427445 * '''SELECT'''
     
    508526Приказот на историјата на билети трае 251.9 s, што го блокира корисничкиот профил. Индексот на `user_id` овозможува базата веднаш да ги лоцира билетите на конкретниот корисник без да ги пребарува сите трансакции во системот.
    509527
    510 ==== Оптимизација:
     528==== 5. Оптимизација и индексирање:
     529
     530Со цел да се избегне целосното скенирање, се предлагаат следните индекси:
     531
     532 * `idx_ticket_purchase_user_id`: За директен пристап до билетите на корисникот.
     533
     534 * `idx_ticket_refund_purchase_id`: За побрзо извршување на '''LEFT JOIN''' операцијата со табелата за рефундации.
     535
     536 * `idx_ticket_purchase_ticket_id` и `idx_event_happening_event_id`: За побрзо поврзување на релациите.
    511537
    512538{{{
     
    526552}}}
    527553
    528 ==== Со индекс:
     554==== 6. Резултат по оптимизација:
     555
     556Времето по оптимизација остана речиси идентично (450.880 ms).
     557
     558Планот покажува дека базата се уште избира '''Parallel Seq Scan''' наместо новокреираниот индекс.
     559
     560Сепак, кај '''INSERT''' и '''UPDATE''' операциите се гледа стабилност и екстремна брзина (под 1ms), што потврдува дека индексите се правилно поставени за интегритетот на податоците.
    529561
    530562 * '''SELECT'''