| 189 | | Аналитички поглед. План: `GROUP BY` / `HashAggregate` над цела `Zapisnik` — агрегацијата ги поминува сите редови, индекс не помага. Решение — '''материјализиран поглед'''; INSERT/UPDATE на основните табели остануваат исти. |
| | 207 | Аналитички поглед. План: `GROUP BY` / `HashAggregate` над цела `Zapisnik` — агрегацијата ги поминува сите редови, индекс не помага. Затоа го материјализираме (`_mv`); резултатот се пресметува еднаш и се чита готов: |
| | 208 | {{{#!sql |
| | 209 | DROP VIEW v_povtoreni_prekrsoci; |
| | 210 | |
| | 211 | CREATE MATERIALIZED VIEW v_povtoreni_prekrsoci_mv AS |
| | 212 | -- ista definicija kako vo del 1 |
| | 213 | ...; |
| | 214 | }}} |
| | 215 | |
| | 216 | '''Прашалник кој го тестираме:''' |
| | 217 | {{{#!sql |
| | 218 | -- testirame za graganin so EMBG = '0412992470302' |
| | 219 | SELECT * FROM v_povtoreni_prekrsoci_mv WHERE embg = '0412992470302'; |
| | 220 | }}} |
| 196 | | Аналитички поглед. План: агрегација (`COUNT`, `MIN`, `MAX`) групирана по полицаец над цела `Zapisnik` — индекс не носи добивка. Решение — '''материјализиран поглед''' со периодично освежување. |
| | 227 | Аналитички поглед. План: агрегација (`COUNT`, `MIN`, `MAX`) групирана по полицаец над цела `Zapisnik` — индекс не носи добивка. Затоа го материјализираме (`_mv`): |
| | 228 | {{{#!sql |
| | 229 | DROP VIEW v_policaici_prosek_zapisnici; |
| | 230 | |
| | 231 | CREATE MATERIALIZED VIEW v_policaici_prosek_zapisnici_mv AS |
| | 232 | -- ista definicija kako vo del 1 |
| | 233 | ...; |
| | 234 | }}} |
| | 235 | |
| | 236 | '''Прашалник кој го тестираме:''' |
| | 237 | {{{#!sql |
| | 238 | -- testirame za policaec so EMBG = '3007982480021' |
| | 239 | SELECT * FROM v_policaici_prosek_zapisnici_mv WHERE embg_p = '3007982480021'; |
| | 240 | }}} |
| 203 | | Аналитички поглед. План: две одделни агрегации (над `Zapisnik`/`Stavka_Zapisnik` и над `Uplata`) па join — двете страни се скенираат во целост. Решение — '''материјализиран поглед''' со периодично освежување. |
| | 247 | Аналитички поглед. План: две одделни агрегации (над `Zapisnik`/`Stavka_Zapisnik` и над `Uplata`) па join — двете страни се скенираат во целост. Затоа го материјализираме (`_mv`): |
| | 248 | {{{#!sql |
| | 249 | DROP VIEW v_istorija_gragjanin; |
| | 250 | |
| | 251 | CREATE MATERIALIZED VIEW v_istorija_gragjanin_mv AS |
| | 252 | -- ista definicija kako vo del 1 |
| | 253 | ...; |
| | 254 | }}} |
| | 255 | |
| | 256 | '''Прашалник кој го тестираме:''' |
| | 257 | {{{#!sql |
| | 258 | -- testirame za graganin so EMBG = '0412992470302' |
| | 259 | SELECT * FROM v_istorija_gragjanin_mv WHERE embg = '0412992470302'; |
| | 260 | }}} |
| 216 | | || v_povtoreni_prekrsoci || ~4,917s || — || материјализација || |
| 217 | | || v_policaici_prosek_zapisnici || ~3,234s || — || материјализација || |
| 218 | | || v_istorija_gragjanin || ~9,076s || — || материјализација || |
| | 273 | || v_povtoreni_prekrsoci || ~4,917s || брзо* || материјализиран поглед || |
| | 274 | || v_policaici_prosek_zapisnici || ~3,234s || брзо* || материјализиран поглед || |
| | 275 | || v_istorija_gragjanin || ~9,076s || брзо* || материјализиран поглед || |
| | 276 | |
| | 277 | '''*''' читањето од материјализиран поглед е речиси моментално; наведеното време е еднократната цена на градењето/освежувањето (`REFRESH`). |