185 | | |
| 185 | Прашалниците погоре служат за статистика и исвештаи преку годините.За истите за да не се извршуваат постојано резултатите од нив се складираат во материјализирани погледи.Ова го правиме за да се избегне прекумерно оптовораување на базата и исцрпување на ресурсите,имајќи во предвид дела податоците се на годишно ниво и обработката се извршива врз голем сет на податоци собрани за сите тие години.Иако веќе со ова се постигнува одредена оптимизација, за случаевите кога има потреба од обновување на податоците скалдирани во овие материјлизирани погледи може да воведеме индекси во веќе постоечките табели преку кои се доаѓа до овие материјализирани погледи за уште пооптимално извржување на прашалниците.Во прилог се индексите кои се воведуваат за секоја од табелите кој се дел од овие прашалници и причината за нивно воведување. |
| 186 | |
| 187 | ==== Индекси за {{{Istanca na linija}}} табелата ==== |
| 188 | |
| 189 | {{{#!div |
| 190 | {{{#!sql |
| 191 | create index idx_instancanalinija_li_id on instancanalinija (li_id); |
| 192 | }}} |
| 193 | }}} |
| 194 | |
| 195 | ==== Индекси за {{{Kontroli}}} табелата ==== |
| 196 | |
| 197 | {{{#!div |
| 198 | {{{#!sql |
| 199 | create index idx_kontroli_inl_id on kontroli (inl_id); |
| 200 | }}} |
| 201 | }}} |
| 202 | |
| 203 | ==== Индекси за {{{Kazna}}} табелата ==== |
| 204 | |
| 205 | {{{#!div |
| 206 | {{{#!sql |
| 207 | create index idx_kazna_kontrola_id on kazna (kontrola_id); |
| 208 | }}} |
| 209 | }}} |
| 210 | {{{#!div |
| 211 | {{{#!sql |
| 212 | create index idx_kazna_kz_datum_year on kazna (extract(year from kz_datum)); |
| 213 | }}} |
| 214 | }}} |
| 215 | |
| 216 | ==== Индекси за {{{Vozenje}}} табелата ==== |
| 217 | |
| 218 | {{{#!div |
| 219 | {{{#!sql |
| 220 | create index idx_vozenje_inl_id on vozenje(inl_id); |
| 221 | }}} |
| 222 | }}} |
| 223 | {{{#!div |
| 224 | {{{#!sql |
| 225 | create index idx_vozenje_hour on vozenje(extract(year from vozenje_start)); |
| 226 | }}} |
| 227 | }}} |
239 | | |
| 281 | create or replace function update_vozenje_on_line_instance_change() returns trigger as $$ |
| 282 | begin |
| 283 | -- update vozenje if inl_datum_end changed |
| 284 | if new.inl_datum_end is distinct from old.inl_datum_end then |
| 285 | update vozenje |
| 286 | set end_date = new.inl_datum_end, |
| 287 | status = 'finished' |
| 288 | where inl_id = new.inl_id |
| 289 | and status = 'active'; |
| 290 | end if; |
| 291 | |
| 292 | return new; |
| 293 | end; |
| 294 | $$ language plpgsql; |
| 295 | |
| 296 | create or replace trigger update_vozenje_za_inl |
| 297 | after update of inl_datum_end on instancanalinija |
| 298 | for each row |
| 299 | execute function update_vozenje_on_line_instance_change(); |