= Оптимизација на прашалници и погледи '''Членови на тим:''' - Aлександар Тодороски 231153 - Антонио Трајковски 231156 - Вељко Аџиќ 231267 Ова страна можете да ја превземете како PDF [https://develop.finki.ukim.mk/projects/IRSON/raw-attachment/wiki/QueryOptimization/IRSON_phase_4.pdf тука]. == Поглед 1: season_standing Овој поглед ни дава за секој тим број на натпревари, вкупно поени, и вкупно поени на противникот во секоја сезона и секој натпревар. Примарен случај кога ќе се користи погледот е при излистување на податоци за томовите во одредена сезона. Иницијално време за извршување трае повеќе од '''5 минути''' (беше прекинато извршувањето), што е неприфатливо за апликацијата. [[Image(init_V1.png)]] Најбавните операции се Full Scan, сортирање и агрегација: [[Image(analysis_V1.png)]] Со индексирање сортирање може да се подобри, но во овој поглед подредуваме според агрегација SUM, што нема да помогне. Индексирање на табелата duel ќе помогне бидејќи на неа се прави Full Scan. [[Image(indexes_V1.png)]] Со додавање на индекс се намалува времето на извршување на '''4s 18ms'''. [[Image(result_V1.png)]] == Поглед 2: monthly_income_for_club Овој поглед за секој спортски клуб дава приход, трошоци, профит, активни спонзори и активни договори со играчи во последните 30 дена. Примарната наменa за погледот е да овозможува транспарентен преглед на финасиските податоци за одреден клуб. Извршување на квери со погледот трае '''11s 397ms'''. [[Image(init_V2.png)]] Во споредба од претходното, ова е доста побрзо без оптимизација, но пак може да се забрза. Според квери планот можеме да ги видиме 3-те табели каде се извршува Full Scan. [[Image(analysis_V2.png)]] [[Image(indexes_V2.png)]] Со овие индексирање на тие 3 табели можеме да добиеме време на извршување '''20ms'''. [[Image(result_V2.png)]] == Поглед 3: upcoming_duels Погледот `upcoming_duels` содржи информации за идно закажани дуели, датумот и времето на дуелот, имиња на тимовите, спортот, име, капацитет и држава на локацијата каде се изигрува, и името на натпревар (доколку има). Иницијално времен на извршување е '''31s 773ms'''. Ова време е иницијално подобрено од индексирање од поглед 1. [[Image(init_V3.png)]] Сепак овој поглед главно филтрира дуели според `start_time`, кој не е опфатен од претходниот индекс. Затоа во планот пак се извршува Full Scan на табелата. [Image(analysis_V3.png)]] Креирање на нов индекс каде прво се индексира `start_time`, ќе ги подобри перформансите. [[Image(indexes_V3.png)]] Со индексирање кверито се извршува за '''10s 696ms'''. [[Image(result_V3.png)]] == Поглед 4: free_locations Погледот има главна примена да даде податоци за локации кои се слободни во одредена држава, во одреден временски период. Опционално може да се филтрира и по капацитет. Иницијалното време на извршување на кверито е '''6s 263ms'''. [[Image(init_V4.png)]] Од анализата може да видиме дека се извршува Full Scan на табелите `duel` и `location`. [[Image(analysis_V4.png)]] Со индексирање можеме да го намалиме времето на извршување на '''5s 433ms'''. Минимални добивки добиваме од индексирање, затоа овие индекси не се користат. [[Image(indexes_V4.png)]] [[Image(result_V4.png)]] == Поглед 5: top_scorers_on_competition [Image(indexes_V5.png)] Овој поглед ни ги враќа сите играчи во даден натпревар рангирани според бројот на даден натпревар. Иницијално извршување на квери со погледот трае повеќе од '''8 минути''', каде беше привремено прекинато. Ова е неприфатливо за апликацијата. [[Image(init_V5.png)]] Од анализа на квери можеме да видиме дека имаме за 2 табели каде се извршува Full Scan. Овде може да се подобри со индексирање. [[Image(analysis_V5.png)]] Ги дефинираме овие индекси со цел да се забрза извршување на кверито: [[Image(indexes_V5.png)]] Со индексирање време на извршување на квери падна на '''104ms'''. [[Image(result_V5.png)]] == Поглед 6: referee_work Погледот `referee_work` враќа податоци за судии: ЕМБГ, име и презиме, држава на потекло, спортска категорија, вкупен број дуели на кој судел, датумот на првиот дуел кој судел и бројот на идни дуели кои треба да суди. Иницијално време на извршување е '''1s 29ms''', што е добро за апликацијата. [[Image(init_V6.png)]] Ако извршиме анализа на кверито можеме да видиме дека скоро секаде имаме пребарување преку индекс. Единствена табела каде има Full Scan е `country`, но бидејќи имаме мал број редици индексирање ќе има мала промена на перформанси. [[Image(analysis_V6.png)]] == Поглед 7: team_stats Овој поглед содржи податоци за секој тим: име на тимот, спортска категорија, држава на потекло, тренери на тимот, бројот на активни договори, бројот на закажани дуели во кои учествуваат и датум на следниот дуел во кој учествуваат. Иницијално време на извршување на кверито е '''12s 132ms'''. [[Image(init_V7.png)]] Од анализата може да видиме дека претходните индекси се искористуваат и доведува до побрзо извршување. [[Image(analysis_V7.png)]] Сепак ако додадеме индекс на `coaching_team` можеме да постигнеме време на извршување од '''1s 339ms'''. [[Image(indexes_V7.png)]] [[Image(result_V7.png)]] == Поглед 8: duel_history Овој поглед ни дава податоци за секој дуел: кога почнал, на која локација се изигрува, имиња на тимовите, освоени поени од тимовите, резултатот, црвени картони за тимовите, кои играчи играат во секој тим, и кои судии го судат дуелот. Иницијално квери трае повеќе од '''8 минути''', каде беше привремено прекинато. За ова квери ни треба оптимизирање. [[Image(init_V8.png)]] Од анализата можеме да видиме дека голем дел операции користат индекси, но на 4 места се извршува Full Scan на големи табели, што доведува до долгото време на извршување. [[Image(analysis_V8.png)]] Креирани се овие два индекси за табелите на кои им се извршува Full Scan. [[Image(indexes_V8.png)]] Со овие индекси добивме време на извршување '''1s 113ms'''. [[Image(result_V8.png)]] == Поглед 9: get_red_cards Помошен поглед кој ги враќа сите играчи што добиле црвен картон за секој дуел. Враќа податоци за дуелот (id, имиња на тимовите, спортска категорија и натпреварот) и информации за играчот (име, за кој тим игра, кога почнал, кога излегол од играта и колку минути пропуштил). Иницијалното време на извршување квери е '''20ms'''. [[Image(init_V9.png)]] Од анализата можеме да видиме дека во скоро сите операции се користи индекс. Единствената табела каде што се има Full Scan е `sport_category`, но бидејќи табелата има малку редици индексирање нема да доведе до поголемо подобрување. [[Image(analysis_V9.png)]] == Поглед 10: player_career_history Овој поглед враќа податоци за сите договори кој склучил спортист. Го враќа ЕМБГ на спортистот, името, датум на раѓање, национална припадност, спортска категорија, име на клубот со кој склучува договр, државата на клубот, почеток и крај на договорот, и статус на договорот. Иницијалната имплементација извршува за '''881ms'''. [[Image(init_V10.png)]] Од анализата може да видиме дека има 2 табели што се извршуваат со Full Scan: `country` и `sportsperson_contract`. Табелата за држави е мала, зато кај неа индексирање нема да врати многу подобрувања во перформанси, но табелата за договори и треба. [[Image(analysis_V10.png)]] По креирање на индексот гледаме дека има минимално забрзување на брзината, односно ни се намали на '''18ms'''. Затоа овој индекс нема да се користи. [[Image(indexes_V10.png)]] [[Image(result_V10.png)]]