Changes between Version 8 and Version 9 of QueryOptimization


Ignore:
Timestamp:
05/07/26 11:58:48 (3 weeks ago)
Author:
231075
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • QueryOptimization

    v8 v9  
    88* Шенол Фејзоски (231075)
    99
    10 == View1: Просечна оценка по продавач (vw_avg_rating_per_vendor) ==
    11 
    12 '''1.''' Примарен филтер за погледот `vw_avg_rating_per_vendor` ќе биде според неговото id (vendor_id на продавачот).
    13 
    14 '''2.''' Примарен случај на употреба ќе е преглед на просечната оценка на секој продавач врз основа на рецензии од проекти. За овој поглед ни се важни перформансите, бидејќи без него се губи време при извршување.
    15 
    16 '''3.''' Иницијалното време за извршување на погледот е '''1m 24s 217ms'''. Ова не е прифатливо време за апликацијата па затоа пристапуваме кон индексирање.
    17 
    18 [[Image(Average_Rating_Execution.png, 800px)]]
    19 
    20 '''4.''' Најбавните операции се full scan на табелите:
    21  * `Project` - 26k cost
    22  * `Client_Vendor_Contract` - 7k cost
    23 
    24 [[Image(Average_Rating_Scan.png, 800px)]]
    25 
    26 Времето изминато во извршување на операциите insert и update пред индексирање изнесува:
    27 
    28 [[Image(Project_Insert_Pre_Index.png, 800px)]]
    29 
    30 [[Image(Project_Update_Pre_Index.png, 800px)]]
     10== View1: Договори по продавач (vw_contracts_per_vendor) ==
     11
     12'''1.''' Примарен филтер за погледот `vw_contracts_per_vendor` ќе биде според неговото id (vendor_id на продавачот).
     13
     14'''2.''' Примарен случај на употреба ќе е преглед на сите активни и историски договори за одреден продавач. За овој поглед ни се важни перформансите, бидејќи без него се губи време при извршување.
     15
     16'''3.''' Иницијалното време за извршување на погледот е '''5s 887ms'''. Ова не е прифатливо време за апликацијата па затоа пристапуваме кон индексирање.
     17
     18[[Image(Contracts_per_Vendor_Execution.png, 800px)]]
     19
     20'''4.''' Најбавната операција е full scan на табелата:
     21 * `Client_Vendor_Contract` - 7k cost
     22
     23[[Image(Contracts_per_Vendor_Scan.png, 800px)]]
     24
     25Времето изминато во извршување на операциите insert и update пред индексирање изнесува:
    3126
    3227[[Image(Client_Vendor_Contract_Insert_Pre_Index.png, 800px)]]
     
    3833{{{
    3934CREATE INDEX idx_project_contract_id ON Project (contract_id);
    40 CREATE INDEX idx_cvc_client_id ON Client_Vendor_Contract (client_id);
    4135CREATE INDEX idx_cvc_vendor_id ON Client_Vendor_Contract (vendor_id);
    4236}}}
    4337
     38Забелешка: Иницијално беше разгледано и креирање на индексот `idx_cvc_client_id ON Client_Vendor_Contract (client_id)`, меѓутоа по мерење на перформансите се утврди дека овој индекс ги влошува перформансите на сите погледи кои филтрираат по client_id, поради ниска селективност на колоната. Затоа индексот беше отстранет.
     39
    4440Времето изминато во извршување на query-то со индекси изнесува:
    4541
    46 ''[SCREENSHOT: SELECT извршување по индексирање]''
    47 
    48 ''[SCREENSHOT: Explain Plan по индексирање]''
     42[[Image(Contracts_per_Vendor_Execution_After_Indexing.png, 800px)]]
     43
     44[[Image(Contracts_per_Vendor_Scan_After_Indexing.png, 800px)]]
     45
     46'''6.''' Времето изминато во извршување на операциите insert и update по индексирање изнесува:
     47
     48[[Image(Client_Vendor_Contract_Insert_Post_Index.png, 800px)]]
     49
     50[[Image(Client_Vendor_Contract_Update_Post_Index.png, 800px)]]
     51
     52----
     53
     54== View2: Договори по клиент (vw_contracts_per_client) ==
     55
     56'''1.''' Примарен филтер за погледот `vw_contracts_per_client` ќе биде според неговото id (client_id на клиентот).
     57
     58'''2.''' Примарен случај на употреба ќе е преглед на сите активни и историски договори за одреден клиент. За овој поглед ни се важни перформансите, бидејќи без него се губи време при извршување.
     59
     60'''3.''' Иницијалното време за извршување на погледот е '''399ms'''. Ова не е прифатливо време за апликацијата па затоа пристапуваме кон индексирање.
     61
     62[[Image(Contracts_per_Client_Execution.png, 800px)]]
     63
     64'''4.''' Најбавната операција е full scan на табелата:
     65 * `Client_Vendor_Contract` - 7k cost
     66
     67[[Image(Contracts_per_Client_Scan.png, 800px)]]
     68
     69Времето изминато во извршување на операциите insert и update пред индексирање изнесува:
     70
     71[[Image(Client_Vendor_Contract_Insert_Pre_Index.png, 800px)]]
     72
     73[[Image(Client_Vendor_Contract_Update_Pre_Index.png, 800px)]]
     74
     75'''5.''' Иницијално беше разгледано индексирање преку `idx_cvc_client_id`, меѓутоа мерењата покажаа дека тој индекс го влошува времето на извршување (399ms → 4s 421ms) поради ниска селективност — колоната client_id враќа многу редови по вредност, па планерот прибегнува кон scatter reads наместо секвенцијален скен. Поради тоа, индексот беше отстранет. Перформансите на овој поглед се подобрени само преку индексите `idx_project_contract_id` и `idx_cvc_vendor_id` креирани во View1. Времето изминато во извршување на query-то изнесува:
     76
     77[[Image(Contracts_per_Client_Execution_After_Indexing.png, 800px)]]
     78
     79[[Image(Contracts_per_Client_Scan_After_Indexing.png, 800px)]]
     80
     81'''6.''' Времето изминато во извршување на операциите insert и update по индексирање изнесува:
     82
     83[[Image(Client_Vendor_Contract_Insert_Post_Index.png, 800px)]]
     84
     85[[Image(Client_Vendor_Contract_Update_Post_Index.png, 800px)]]
     86
     87----
     88
     89== View3: Проекти по продавач (vw_projects_per_vendor) ==
     90
     91'''1.''' Примарен филтер за погледот `vw_projects_per_vendor` ќе биде според неговото id (vendor_id на продавачот).
     92
     93'''2.''' Примарен случај на употреба ќе е преглед на сите проекти поврзани со одреден продавач. За овој поглед ни се важни перформансите, бидејќи без него се губи време при извршување.
     94
     95'''3.''' Иницијалното време за извршување на погледот е '''445ms'''. Ова не е прифатливо време за апликацијата па затоа пристапуваме кон индексирање.
     96
     97[[Image(Projects_per_Vendor_Execution.png, 800px)]]
     98
     99'''4.''' Најбавните операции се full scan на табелите:
     100 * `Project` - 26k cost
     101 * `Client_Vendor_Contract` - 7k cost
     102
     103[[Image(Projects_per_Vendor_Scan.png, 800px)]]
     104
     105Времето изминато во извршување на операциите insert и update пред индексирање изнесува:
     106
     107[[Image(Project_Insert_Pre_Index.png, 800px)]]
     108
     109[[Image(Project_Update_Pre_Index.png, 800px)]]
     110
     111[[Image(Client_Vendor_Contract_Insert_Pre_Index.png, 800px)]]
     112
     113[[Image(Client_Vendor_Contract_Update_Pre_Index.png, 800px)]]
     114
     115'''5.''' Иако овој поглед не е аналитички и би имал потреба од индексирање, индексите `idx_project_contract_id` и `idx_cvc_vendor_id` креирани во View1 ги покриваат потребните колони за овој поглед. Забележано е дека присуството на `idx_cvc_client_id` го влошуваше планот за извршување (445ms → 7s 377ms), па по негово отстранување перформансите се вратени и понатаму подобрени. Времето изминато во извршување на query-то изнесува:
     116
     117[[Image(Projects_per_Vendor_Execution_After_Indexing.png, 800px)]]
     118
     119[[Image(Projects_per_Vendor_Scan_After_Indexing.png, 800px)]]
    49120
    50121'''6.''' Времето изминато во извршување на операциите insert и update по индексирање изнесува:
     
    60131----
    61132
    62 == View2: Вкупен буџет по клиент (vw_budget_per_client) ==
    63 
    64 '''1.''' Примарен филтер за погледот `vw_budget_per_client` ќе биде според неговото id (client_id на клиентот).
    65 
    66 '''2.''' Примарен случај на употреба ќе е преглед на вкупниот буџет потрошен по клиент низ сите проекти и договори. За овој поглед ни се важни перформансите, бидејќи без него се губи време при извршување.
    67 
    68 '''3.''' Иницијалното време за извршување на погледот е '''320ms'''. Ова не е прифатливо време за апликацијата па затоа пристапуваме кон индексирање.
    69 
    70 [[Image(Budget_per_Client_Execution.png, 800px)]]
    71 
    72 '''4.''' Најбавните операции се full scan на табелите:
    73  * `Project` - 26k cost
    74  * `Client_Vendor_Contract` - 7k cost
    75 
    76 [[Image(Budget_per_Client_Scan.png, 800px)]]
     133== View4: Проекти по клиент (vw_projects_per_client) ==
     134
     135'''1.''' Примарен филтер за погледот `vw_projects_per_client` ќе биде според неговото id (client_id на клиентот).
     136
     137'''2.''' Примарен случај на употреба ќе е преглед на сите проекти поврзани со одреден клиент. За овој поглед ни се важни перформансите, бидејќи без него се губи време при извршување.
     138
     139'''3.''' Иницијалното време за извршување на погледот е '''626ms'''. Ова не е прифатливо време за апликацијата па затоа пристапуваме кон индексирање.
     140
     141[[Image(Projects_per_Client_Execution.png, 800px)]]
     142
     143'''4.''' Најбавните операции се full scan на табелите:
     144 * `Project` - 26k cost
     145 * `Client_Vendor_Contract` - 7k cost
     146
     147[[Image(Projects_per_Client_Scan.png, 800px)]]
    77148
    78149Времето изминато во извршување на операциите insert и update пред индексирање изнесува:
     
    86157[[Image(Client_Vendor_Contract_Update_Pre_Index.png, 800px)]]
    87158
    88 '''5.''' Индексите креирани во View1 ги покриваат и овие табели. Времето изминато во извршување на query-то со индекси изнесува:
    89 
    90 ''[SCREENSHOT: SELECT извршување по индексирање]''
    91 
    92 ''[SCREENSHOT: Explain Plan по индексирање]''
     159'''5.''' Иницијално беше разгледано индексирање преку `idx_cvc_client_id`, меѓутоа мерењата покажаа дека тој индекс го влошува времето на извршување (626ms → 2s 636ms) поради ниска селективност на client_id колоната. По отстранување на тој индекс, перформансите на овој поглед се подобрени преку индексите `idx_project_contract_id` и `idx_cvc_vendor_id` креирани во View1. Времето изминато во извршување на query-то изнесува:
     160
     161[[Image(Projects_per_Client_Execution_After_Indexing.png, 800px)]]
     162
     163[[Image(Projects_per_Client_Scan_After_Indexing.png, 800px)]]
    93164
    94165'''6.''' Времето изминато во извршување на операциите insert и update по индексирање изнесува:
     
    104175----
    105176
    106 == View3: Вкупен буџет по продавач (vw_budget_per_vendor) ==
    107 
    108 '''1.''' Примарен филтер за погледот `vw_budget_per_vendor` ќе биде според неговото id (vendor_id на продавачот).
    109 
    110 '''2.''' Примарен случај на употреба ќе е преглед на вкупниот буџет потрошен по продавач низ сите проекти и договори. За овој поглед ни се важни перформансите, бидејќи без него се губи време при извршување.
    111 
    112 '''3.''' Иницијалното време за извршување на погледот е '''319ms'''. Ова не е прифатливо време за апликацијата па затоа пристапуваме кон индексирање.
    113 
    114 [[Image(Budget_per_Vendor_Execution.png, 800px)]]
    115 
    116 '''4.''' Најбавните операции се full scan на табелите:
    117  * `Project` - 26k cost
    118  * `Client_Vendor_Contract` - 7k cost
    119 
    120 [[Image(Budget_per_Vendor_Scan.png, 800px)]]
    121 
    122 Времето изминато во извршување на операциите insert и update пред индексирање изнесува:
    123 
    124 [[Image(Project_Insert_Pre_Index.png, 800px)]]
    125 
    126 [[Image(Project_Update_Pre_Index.png, 800px)]]
    127 
    128 [[Image(Client_Vendor_Contract_Insert_Pre_Index.png, 800px)]]
    129 
    130 [[Image(Client_Vendor_Contract_Update_Pre_Index.png, 800px)]]
    131 
    132 '''5.''' Индексите креирани во View1 ги покриваат и овие табели. Времето изминато во извршување на query-то со индекси изнесува:
    133 
    134 ''[SCREENSHOT: SELECT извршување по индексирање]''
    135 
    136 ''[SCREENSHOT: Explain Plan по индексирање]''
    137 
    138 '''6.''' Времето изминато во извршување на операциите insert и update по индексирање изнесува:
    139 
    140 [[Image(Project_Insert_Post_Index.png, 800px)]]
    141 
    142 [[Image(Project_Update_Post_Index.png, 800px)]]
    143 
    144 [[Image(Client_Vendor_Contract_Insert_Post_Index.png, 800px)]]
    145 
    146 [[Image(Client_Vendor_Contract_Update_Post_Index.png, 800px)]]
    147 
    148 ----
    149 
    150 == View4: Клиенти по индустрија (vw_clients_per_industry) ==
     177== View5: Клиенти по индустрија (vw_clients_per_industry) ==
    151178
    152179'''1.''' Примарен филтер за погледот `vw_clients_per_industry` ќе биде според неговото id (industry_id на индустријата).
     
    154181'''2.''' Примарен случај на употреба ќе е преглед на сите клиенти кои припаѓаат на одредена индустрија. За овој поглед ни се важни перформансите, бидејќи без него се губи време при извршување.
    155182
    156 '''3.''' Иницијалното време за извршување на погледот е '''94ms'''. Ова не е прифатливо време за апликацијата па затоа пристапуваме кон индексирање.
     183'''3.''' Иницијалното време за извршување на погледот е '''94ms'''. Иако на прв поглед ова изгледа прифатливо, беше разгледано дали индексирање би го подобрило времето.
    157184
    158185[[Image(Clients_per_Industry_Execution.png, 800px)]]
     
    169196[[Image(Client_Update_Pre_Index.png, 800px)]]
    170197
    171 '''5.''' По креирање на индексот:
    172 
    173 {{{
    174 CREATE INDEX idx_client_industry_id ON Client (industry_id);
    175 }}}
    176 
    177 Времето изминато во извршување на query-то со индекси изнесува:
    178 
    179 ''[SCREENSHOT: SELECT извршување по индексирање]''
    180 
    181 ''[SCREENSHOT: Explain Plan по индексирање]''
    182 
    183 '''6.''' Времето изминато во извршување на операциите insert и update по индексирање изнесува:
    184 
    185 [[Image(Client_Insert_Post_Index.png, 800px)]]
    186 
    187 [[Image(Client_Update_Post_Index.png, 800px)]]
    188 
    189 ----
    190 
    191 == View5: Договори по клиент (vw_contracts_per_client) ==
    192 
    193 '''1.''' Примарен филтер за погледот `vw_contracts_per_client` ќе биде според неговото id (client_id на клиентот).
    194 
    195 '''2.''' Примарен случај на употреба ќе е преглед на сите активни и историски договори за одреден клиент. За овој поглед ни се важни перформансите, бидејќи без него се губи време при извршување.
    196 
    197 '''3.''' Иницијалното време за извршување на погледот е '''399ms'''. Ова не е прифатливо време за апликацијата па затоа пристапуваме кон индексирање.
    198 
    199 [[Image(Contracts_per_Client_Execution.png, 800px)]]
    200 
    201 '''4.''' Најбавната операција е full scan на табелата:
    202  * `Client_Vendor_Contract` - 7k cost
    203 
    204 [[Image(Contracts_per_Client_Scan.png, 800px)]]
    205 
    206 Времето изминато во извршување на операциите insert и update пред индексирање изнесува:
    207 
    208 [[Image(Client_Vendor_Contract_Insert_Pre_Index.png, 800px)]]
    209 
    210 [[Image(Client_Vendor_Contract_Update_Pre_Index.png, 800px)]]
    211 
    212 '''5.''' Индексите креирани во View1 ги покриваат и овие табели. Времето изминато во извршување на query-то со индекси изнесува:
    213 
    214 ''[SCREENSHOT: SELECT извршување по индексирање]''
    215 
    216 ''[SCREENSHOT: Explain Plan по индексирање]''
    217 
    218 '''6.''' Времето изминато во извршување на операциите insert и update по индексирање изнесува:
    219 
    220 [[Image(Client_Vendor_Contract_Insert_Post_Index.png, 800px)]]
    221 
    222 [[Image(Client_Vendor_Contract_Update_Post_Index.png, 800px)]]
    223 
    224 ----
    225 
    226 == View6: Договори по продавач (vw_contracts_per_vendor) ==
    227 
    228 '''1.''' Примарен филтер за погледот `vw_contracts_per_vendor` ќе биде според неговото id (vendor_id на продавачот).
    229 
    230 '''2.''' Примарен случај на употреба ќе е преглед на сите активни и историски договори за одреден продавач. За овој поглед ни се важни перформансите, бидејќи без него се губи време при извршување.
    231 
    232 '''3.''' Иницијалното время за извршување на погледот е '''5s 887ms'''. Ова не е прифатливо времe за апликацијата па затоа пристапуваме кон индексирање.
    233 
    234 [[Image(Contracts_per_Vendor_Execution.png, 800px)]]
    235 
    236 '''4.''' Најбавната операција е full scan на табелата:
    237  * `Client_Vendor_Contract` - 7k cost
    238 
    239 [[Image(Contracts_per_Vendor_Scan.png, 800px)]]
    240 
    241 Времето изминато во извршување на операциите insert и update пред индексирање изнесува:
    242 
    243 [[Image(Client_Vendor_Contract_Insert_Pre_Index.png, 800px)]]
    244 
    245 [[Image(Client_Vendor_Contract_Update_Pre_Index.png, 800px)]]
    246 
    247 '''5.''' Индексите креирани во View1 ги покриваат и овие табели. Времето изминато во извршување на query-то со индекси изнесува:
    248 
    249 ''[SCREENSHOT: SELECT извршување по индексирање]''
    250 
    251 ''[SCREENSHOT: Explain Plan по индексирање]''
    252 
    253 '''6.''' Времето изминато во извршување на операциите insert и update по индексирање изнесува:
    254 
    255 [[Image(Client_Vendor_Contract_Insert_Post_Index.png, 800px)]]
    256 
    257 [[Image(Client_Vendor_Contract_Update_Post_Index.png, 800px)]]
    258 
    259 ----
    260 
    261 == View7: Број на проекти по статус по клиент (vw_project_count_by_status_per_client) ==
    262 
    263 '''1.''' Примарен филтер за погледот `vw_project_count_by_status_per_client` ќе биде според неговото id (client_id на клиентот).
    264 
    265 '''2.''' Примарен случај на употреба ќе е преглед на бројот на проекти групирани по статус за одреден клиент. За овој поглед ни се важни перформансите, бидејќи без него се губи време при извршување.
    266 
    267 '''3.''' Иницијалното время за извршување на погледот е '''317ms'''. Ова не е прифатливо времe за апликацијата па затоа пристапуваме кон индексирање.
    268 
    269 [[Image(Project_Count_By_Status_Per_Client_Execution.png, 800px)]]
    270 
    271 '''4.''' Најбавните операции се full scan на табелите:
    272  * `Project` - 26k cost
    273  * `Client_Vendor_Contract` - 7k cost
    274 
    275 [[Image(Project_Count_By_Status_Per_Client_Scan.png, 800px)]]
    276 
    277 Времето изминато во извршување на операциите insert и update пред индексирање изнесува:
    278 
    279 [[Image(Project_Insert_Pre_Index.png, 800px)]]
    280 
    281 [[Image(Project_Update_Pre_Index.png, 800px)]]
    282 
    283 [[Image(Client_Vendor_Contract_Insert_Pre_Index.png, 800px)]]
    284 
    285 [[Image(Client_Vendor_Contract_Update_Pre_Index.png, 800px)]]
    286 
    287 '''5.''' Индексите креирани во View1 ги покриваат и овие табели. Времето изминато во извршување на query-то со индекси изнесува:
    288 
    289 ''[SCREENSHOT: SELECT извршување по индексирање]''
    290 
    291 ''[SCREENSHOT: Explain Plan по индексирање]''
    292 
    293 '''6.''' Времето изминато во извршување на операциите insert и update по индексирање изнесува:
    294 
    295 [[Image(Project_Insert_Post_Index.png, 800px)]]
    296 
    297 [[Image(Project_Update_Post_Index.png, 800px)]]
    298 
    299 [[Image(Client_Vendor_Contract_Insert_Post_Index.png, 800px)]]
    300 
    301 [[Image(Client_Vendor_Contract_Update_Post_Index.png, 800px)]]
    302 
    303 ----
    304 
    305 == View8: Број на проекти по статус по продавач (vw_project_count_by_status_per_vendor) ==
    306 
    307 '''1.''' Примарен филтер за погледот `vw_project_count_by_status_per_vendor` ќе биде според неговото id (vendor_id на продавачот).
    308 
    309 '''2.''' Примарен случај на употреба ќе е преглед на бројот на проекти групирани по статус за одреден продавач. За овој поглед ни се важни перформансите, бидејќи без него се губи време при извршување.
    310 
    311 '''3.''' Иницијалното время за извршување на погледот е '''317ms'''. Ова не е прифатливо времe за апликацијата па затоа пристапуваме кон индексирање.
    312 
    313 [[Image(Project_Count_By_Status_Per_Vendor_Execution.png, 800px)]]
    314 
    315 '''4.''' Најбавните операции се full scan на табелите:
    316  * `Project` - 26k cost
    317  * `Client_Vendor_Contract` - 7k cost
    318 
    319 [[Image(Project_Count_By_Status_Per_Vendor_Scan.png, 800px)]]
    320 
    321 Времето изминато во извршување на операциите insert и update пред индексирање изнесува:
    322 
    323 [[Image(Project_Insert_Pre_Index.png, 800px)]]
    324 
    325 [[Image(Project_Update_Pre_Index.png, 800px)]]
    326 
    327 [[Image(Client_Vendor_Contract_Insert_Pre_Index.png, 800px)]]
    328 
    329 [[Image(Client_Vendor_Contract_Update_Pre_Index.png, 800px)]]
    330 
    331 '''5.''' Индексите креирани во View1 ги покриваат и овие табели. Времето изминато во извршување на query-то со индекси изнесува:
    332 
    333 ''[SCREENSHOT: SELECT извршување по индексирање]''
    334 
    335 ''[SCREENSHOT: Explain Plan по индексирање]''
    336 
    337 '''6.''' Времето изминато во извршување на операциите insert и update по индексирање изнесува:
    338 
    339 [[Image(Project_Insert_Post_Index.png, 800px)]]
    340 
    341 [[Image(Project_Update_Post_Index.png, 800px)]]
    342 
    343 [[Image(Client_Vendor_Contract_Insert_Post_Index.png, 800px)]]
    344 
    345 [[Image(Client_Vendor_Contract_Update_Post_Index.png, 800px)]]
    346 
    347 ----
    348 
    349 == View9: Проекти по клиент (vw_projects_per_client) ==
    350 
    351 '''1.''' Примарен филтер за погледот `vw_projects_per_client` ќе биде според неговото id (client_id на клиентот).
    352 
    353 '''2.''' Примарен случај на употреба ќе е преглед на сите проекти поврзани со одреден клиент. За овој поглед ни се важни перформансите, бидејќи без него се губи време при извршување.
    354 
    355 '''3.''' Иницијалното время за извршување на погледот е '''626ms'''. Ова не е прифатливо времe за апликацијата па затоа пристапуваме кон индексирање.
    356 
    357 [[Image(Projects_per_Client_Execution.png, 800px)]]
    358 
    359 '''4.''' Најбавните операции се full scan на табелите:
    360  * `Project` - 26k cost
    361  * `Client_Vendor_Contract` - 7k cost
    362 
    363 [[Image(Projects_per_Client_Scan.png, 800px)]]
    364 
    365 Времето изминато во извршување на операциите insert и update пред индексирање изнесува:
    366 
    367 [[Image(Project_Insert_Pre_Index.png, 800px)]]
    368 
    369 [[Image(Project_Update_Pre_Index.png, 800px)]]
    370 
    371 [[Image(Client_Vendor_Contract_Insert_Pre_Index.png, 800px)]]
    372 
    373 [[Image(Client_Vendor_Contract_Update_Pre_Index.png, 800px)]]
    374 
    375 '''5.''' Индексите креирани во View1 ги покриваат и овие табели. Времето изминато во извршување на query-то со индекси изнесува:
    376 
    377 ''[SCREENSHOT: SELECT извршување по индексирање]''
    378 
    379 ''[SCREENSHOT: Explain Plan по индексирање]''
    380 
    381 '''6.''' Времето изминато во извршување на операциите insert и update по индексирање изнесува:
    382 
    383 [[Image(Project_Insert_Post_Index.png, 800px)]]
    384 
    385 [[Image(Project_Update_Post_Index.png, 800px)]]
    386 
    387 [[Image(Client_Vendor_Contract_Insert_Post_Index.png, 800px)]]
    388 
    389 [[Image(Client_Vendor_Contract_Update_Post_Index.png, 800px)]]
    390 
    391 ----
    392 
    393 == View10: Проекти по продавач (vw_projects_per_vendor) ==
    394 
    395 '''1.''' Примарен филтер за погледот `vw_projects_per_vendor` ќе биде според неговото id (vendor_id на продавачот).
    396 
    397 '''2.''' Примарен случај на употреба ќе е преглед на сите проекти поврзани со одреден продавач. За овој поглед ни се важни перформансите, бидејќи без него се губи време при извршување.
    398 
    399 '''3.''' Иницијалното время за извршување на погледот е '''445ms'''. Ова не е прифатливо времe за апликацијата па затоа пристапуваме кон индексирање.
    400 
    401 [[Image(Projects_per_Vendor_Execution.png, 800px)]]
    402 
    403 '''4.''' Најбавните операции се full scan на табелите:
    404  * `Project` - 26k cost
    405  * `Client_Vendor_Contract` - 7k cost
    406 
    407 [[Image(Projects_per_Vendor_Scan.png, 800px)]]
    408 
    409 Времето изминато во извршување на операциите insert и update пред индексирање изнесува:
    410 
    411 [[Image(Project_Insert_Pre_Index.png, 800px)]]
    412 
    413 [[Image(Project_Update_Pre_Index.png, 800px)]]
    414 
    415 [[Image(Client_Vendor_Contract_Insert_Pre_Index.png, 800px)]]
    416 
    417 [[Image(Client_Vendor_Contract_Update_Pre_Index.png, 800px)]]
    418 
    419 '''5.''' Индексите креирани во View1 ги покриваат и овие табели. Времето изминато во извршување на query-то со индекси изнесува:
    420 
    421 ''[SCREENSHOT: SELECT извршување по индексирање]''
    422 
    423 ''[SCREENSHOT: Explain Plan по индексирање]''
    424 
    425 '''6.''' Времето изминато во извршување на операциите insert и update по индексирање изнесува:
    426 
    427 [[Image(Project_Insert_Post_Index.png, 800px)]]
    428 
    429 [[Image(Project_Update_Post_Index.png, 800px)]]
    430 
    431 [[Image(Client_Vendor_Contract_Insert_Post_Index.png, 800px)]]
    432 
    433 [[Image(Client_Vendor_Contract_Update_Post_Index.png, 800px)]]
    434 
    435 ----
    436 
    437 == View11: Нерешени тикети за спорови (vw_unresolved_dispute_tickets) ==
     198'''5.''' По тестирање на индексот `idx_client_industry_id ON Client (industry_id)`, мерењата покажаа дека индексот го влошува времето на извршување (94ms → 1s 166ms). Табелата `Client` е доволно мала (500 cost) за планерот да претпочита секвенцијален скен. Поради тоа, индексот беше отстранет и се заклучува дека нема потреба од индексирање за овој поглед.
     199
     200'''6.''' Времето на извршување на операциите insert и update останува исто.
     201
     202----
     203
     204== View6: Нерешени тикети за спорови (vw_unresolved_dispute_tickets) ==
    438205
    439206'''1.''' Примарен филтер за погледот `vw_unresolved_dispute_tickets` ќе биде според project_id на проектот или assigned_management_user_id на корисникот.
     
    441208'''2.''' Примарен случај на употреба ќе е преглед на сите активни нерешени тикети за спорови доделени на одреден менаџмент корисник или поврзани со одреден проект. За овој поглед ни се важни перформансите, бидејќи без него се губи време при извршување.
    442209
    443 '''3.''' Иницијалното время за извршување на погледот е '''731ms'''. Ова не е прифатливо времe за апликацијата па затоа пристапуваме кон индексирање.
     210'''3.''' Иницијалното време за извршување на погледот е '''731ms'''. Ова не е прифатливо време за апликацијата па затоа пристапуваме кон индексирање.
    444211
    445212[[Image(Unresolved_Dispute_Tickets_Execution.png, 800px)]]
     
    463230}}}
    464231
    465 Времето изминато во извршување на query-то со индекси изнесува:
    466 
    467 ''[SCREENSHOT: SELECT извршување по индексирање]''
    468 
    469 ''[SCREENSHOT: Explain Plan по индексирање]''
     232Времето изминато во извршување на query-то со индекси изнесува (731ms → 578ms):
     233
     234[[Image(Unresolved_Dispute_Tickets_Execution_After_Indexing.png, 800px)]]
     235
     236[[Image(Unresolved_Dispute_Tickets_Scan_After_Indexing.png, 800px)]]
    470237
    471238'''6.''' Времето изминато во извршување на операциите insert и update по индексирање изнесува:
     
    477244----
    478245
    479 == View12: Претплати на продавачи (vw_vendor_subscriptions) ==
     246== View7: Претплати на продавачи (vw_vendor_subscriptions) ==
    480247
    481248'''1.''' Примарен филтер за погледот `vw_vendor_subscriptions` ќе биде според неговото id (vendor_id на продавачот).
     
    483250'''2.''' Примарен случај на употреба ќе е преглед на активните и историските претплати за одреден продавач. За овој поглед ни се важни перформансите, бидејќи без него се губи време при извршување.
    484251
    485 '''3.''' Иницијалното время за извршување на погледот е '''37ms'''. Ова е прифатливо времe за апликацијата.
     252'''3.''' Иницијалното време за извршување на погледот е '''37ms'''. Ова е прифатливо време за апликацијата, па затоа нема потреба од индексирање.
    486253
    487254[[Image(Vendor_Subscriptions_Execution.png, 800px)]]
     
    490257 * `Vendor_Subscription` - 180 cost
    491258
    492 Иако времето е прифатливо, сепак пристапуваме кон индексирање за дополнителна оптимизација.
     259Времето е прифатливо и нема потреба да се пристапи кон индексирање.
    493260
    494261[[Image(Vendor_Subscriptions_Scan.png, 800px)]]
    495262
    496 Времето изминато во извршување на операциите insert и update пред индексирање изнесува:
    497 
    498 [[Image(Vendor_Subscription_Insert_Pre_Index.png, 800px)]]
    499 
    500 [[Image(Vendor_Subscription_Update_Pre_Index.png, 800px)]]
    501 
    502 '''5.''' По креирање на индексите:
    503 
    504 {{{
    505 CREATE INDEX idx_vendorsub_vendor_id ON Vendor_Subscription (vendor_id);
    506 CREATE INDEX idx_vendorsub_tier_id ON Vendor_Subscription (tier_id);
    507 }}}
    508 
    509 Времето изминато во извршување на query-то со индекси изнесува:
    510 
    511 ''[SCREENSHOT: SELECT извршување по индексирање]''
    512 
    513 ''[SCREENSHOT: Explain Plan по индексирање]''
    514 
    515 '''6.''' Времето изминато во извршување на операциите insert и update по индексирање изнесува:
    516 
    517 [[Image(Vendor_Subscription_Insert_Post_Index.png, 800px)]]
    518 
    519 [[Image(Vendor_Subscription_Update_Post_Index.png, 800px)]]
     263'''5.''' Нема потреба да се преуреди прашалникот.
     264
     265'''6.''' Времето на извршување на операциите останува исто.
     266
     267----
     268
     269== View8: Просечна оценка по продавач (vw_avg_rating_per_vendor) ==
     270
     271'''1.''' Примарен филтер за погледот `vw_avg_rating_per_vendor` ќе биде според неговото id (vendor_id на продавачот).
     272
     273'''2.''' Примарен случај на употреба ќе е преглед на просечната оценка на секој продавач врз основа на рецензии од проекти. Овој поглед е аналитички по природа (пресметува агрегатни вредности со AVG и COUNT) и не бара директно индексирање. Сепак, перформансите на овој поглед се подобрени поради индексирањето применето во View1.
     274
     275'''3.''' Иницијалното време за извршување на погледот е '''1m 24s 217ms'''.
     276
     277[[Image(Average_Rating_Execution.png, 800px)]]
     278
     279'''4.''' Најбавните операции се full scan на табелите:
     280 * `Project` - 26k cost
     281 * `Client_Vendor_Contract` - 7k cost
     282
     283[[Image(Average_Rating_Scan.png, 800px)]]
     284
     285'''5.''' Иако овој поглед е аналитички и не бара директно индексирање, перформансите се подобрени поради индексите `idx_project_contract_id` и `idx_cvc_vendor_id` креирани во View1 (1m 24s 217ms → 15s 519ms). Времето изминато во извршување на query-то по индексирање изнесува:
     286
     287[[Image(Average_Rating_per_Vendor_Execution_After_Indexing.png, 800px)]]
     288
     289[[Image(Average_Rating_per_Vendor_Scan_After_Indexing.png, 800px)]]
     290
     291'''6.''' Времето на извршување на операциите insert и update останува непроменето бидејќи не се додадени нови индекси за овој поглед.
     292
     293----
     294
     295== View9: Вкупен буџет по клиент (vw_budget_per_client) ==
     296
     297'''1.''' Примарен филтер за погледот `vw_budget_per_client` ќе биде според неговото id (client_id на клиентот).
     298
     299'''2.''' Примарен случај на употреба ќе е преглед на вкупниот буџет потрошен по клиент низ сите проекти и договори. Овој поглед е аналитички по природа (пресметува агрегатни вредности со SUM и COUNT) и не бара директно индексирање.
     300
     301'''3.''' Иницијалното время за извршување на погледот е '''320ms'''.
     302
     303[[Image(Budget_per_Client_Execution.png, 800px)]]
     304
     305'''4.''' Најбавните операции се full scan на табелите:
     306 * `Project` - 26k cost
     307 * `Client_Vendor_Contract` - 7k cost
     308
     309[[Image(Budget_per_Client_Scan.png, 800px)]]
     310
     311'''5.''' Иако овој поглед е аналитички, беше забележано дека присуството на `idx_cvc_client_id` го влошуваше времето на извршување (320ms → 621ms). По отстранување на тој индекс, перформансите се стабилизирани со индексите `idx_project_contract_id` и `idx_cvc_vendor_id` од View1. Времето изминато во извршување на query-то по индексирање изнесува:
     312
     313[[Image(Budget_per_Client_Execution_After_Indexing.png, 800px)]]
     314
     315[[Image(Budget_per_Client_Scan_After_Indexing.png, 800px)]]
     316
     317'''6.''' Времето на извршување на операциите insert и update останува непроменето бидејќи не се додадени нови индекси за овој поглед.
     318
     319----
     320
     321== View10: Вкупен буџет по продавач (vw_budget_per_vendor) ==
     322
     323'''1.''' Примарен филтер за погледот `vw_budget_per_vendor` ќе биде според неговото id (vendor_id на продавачот).
     324
     325'''2.''' Примарен случај на употреба ќе е преглед на вкупниот буџет потрошен по продавач низ сите проекти и договори. Овој поглед е аналитички по природа (пресметува агрегатни вредности со SUM и COUNT) и не бара директно индексирање. Сепак, перформансите на овој поглед се подобрени поради индексирањето применето во View1.
     326
     327'''3.''' Иницијалното время за извршување на погледот е '''319ms'''.
     328
     329[[Image(Budget_per_Vendor_Execution.png, 800px)]]
     330
     331'''4.''' Најбавните операции се full scan на табелите:
     332 * `Project` - 26k cost
     333 * `Client_Vendor_Contract` - 7k cost
     334
     335[[Image(Budget_per_Vendor_Scan.png, 800px)]]
     336
     337'''5.''' Иако овој поглед е аналитички и не бара директно индексирање, перформансите се подобрени поради индексите `idx_project_contract_id` и `idx_cvc_vendor_id` креирани во View1 (319ms → 39ms). Времето изминато во извршување на query-то по индексирање изнесува:
     338
     339[[Image(Budget_per_Vendor_Execution_After_Indexing.png, 800px)]]
     340
     341[[Image(Budget_per_Vendor_Scan_After_Indexing.png, 800px)]]
     342
     343'''6.''' Времето на извршување на операциите insert и update останува непроменето бидејќи не се додадени нови индекси за овој поглед.
     344
     345----
     346
     347== View11: Број на проекти по статус по клиент (vw_project_count_by_status_per_client) ==
     348
     349'''1.''' Примарен филтер за погледот `vw_project_count_by_status_per_client` ќе биде според неговото id (client_id на клиентот).
     350
     351'''2.''' Примарен случај на употреба ќе е преглед на бројот на проекти групирани по статус за одреден клиент. Овој поглед е аналитички по природа (пресметува агрегатни вредности со COUNT и GROUP BY) и не бара директно индексирање.
     352
     353'''3.''' Иницијалното время за извршување на погледот е '''317ms'''.
     354
     355[[Image(Project_Count_By_Status_Per_Client_Execution.png, 800px)]]
     356
     357'''4.''' Најбавните операции се full scan на табелите:
     358 * `Project` - 26k cost
     359 * `Client_Vendor_Contract` - 7k cost
     360
     361[[Image(Project_Count_By_Status_Per_Client_Scan.png, 800px)]]
     362
     363'''5.''' Иако овој поглед е аналитички, беше забележано дека присуството на `idx_cvc_client_id` го влошуваше времето на извршување (317ms → 1s 430ms). По отстранување на тој индекс, перформансите се стабилизирани со индексите `idx_project_contract_id` и `idx_cvc_vendor_id` од View1. Времето изминато во извршување на query-то по индексирање изнесува:
     364
     365[[Image(Project_Count_by_Status_per_Client_Execution_After_Indexing.png, 800px)]]
     366
     367[[Image(Project_Count_by_Status_per_Client_Scan_After_Indexing.png, 800px)]]
     368
     369'''6.''' Времето на извршување на операциите insert и update останува непроменето бидејќи не се додадени нови индекси за овој поглед.
     370
     371----
     372
     373== View12: Број на проекти по статус по продавач (vw_project_count_by_status_per_vendor) ==
     374
     375'''1.''' Примарен филтер за погледот `vw_project_count_by_status_per_vendor` ќе биде според неговото id (vendor_id на продавачот).
     376
     377'''2.''' Примарен случај на употреба ќе е преглед на бројот на проекти групирани по статус за одреден продавач. Овој поглед е аналитички по природа (пресметува агрегатни вредности со COUNT и GROUP BY) и не бара директно индексирање. Сепак, перформансите на овој поглед се подобрени поради индексирањето применето во View1.
     378
     379'''3.''' Иницијалното время за извршување на погледот е '''317ms'''.
     380
     381[[Image(Project_Count_By_Status_Per_Vendor_Execution.png, 800px)]]
     382
     383'''4.''' Најбавните операции се full scan на табелите:
     384 * `Project` - 26k cost
     385 * `Client_Vendor_Contract` - 7k cost
     386
     387[[Image(Project_Count_By_Status_Per_Vendor_Scan.png, 800px)]]
     388
     389'''5.''' Иако овој поглед е аналитички и не бара директно индексирање, перформансите се подобрени поради индексите `idx_project_contract_id` и `idx_cvc_vendor_id` креирани во View1 (317ms → 63ms). Времето изминато во извршување на query-то по индексирање изнесува:
     390
     391[[Image(Project_Count_by_Status_per_Vendor_Execution_After_Indexing.png, 800px)]]
     392
     393[[Image(Project_Count_by_Status_per_Vendor_Scan_After_Indexing.png, 800px)]]
     394
     395'''6.''' Времето на извршување на операциите insert и update останува непроменето бидејќи не се додадени нови индекси за овој поглед.