| 206 | | === Поглед 4 — v_povtoreni_prekrsoci === |
| 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 | | }}} |
| 221 | | |
| | 206 | === Поглед 4 — v_povtoreni_prekrsoci_mv === |
| | 207 | Аналитички поглед — `GROUP BY` / `HashAggregate` над цела `Zapisnik`, па индекс не помага. Решение: материјализација (дефиницијата е во делот Погледи). |
| | 208 | |
| | 209 | '''Прашалник кој го тестираме:''' |
| | 210 | {{{#!sql |
| | 211 | -- testirame za graganin so ime = 'Виолета' |
| | 212 | SELECT * FROM v_povtoreni_prekrsoci_mv WHERE ime = 'Виолета'; |
| | 213 | }}} |
| | 214 | |
| | 215 | '''Пред''' (обичен аналитички поглед)[[BR]] |
| | 216 | време на извршување: 1m8s |
| 224 | | '''Време на извршување:''' градењето (`REFRESH`) трае ~4,917s; потоа читањето по `EMBG` е речиси моментално. |
| 225 | | |
| 226 | | === Поглед 5 — v_policaici_prosek_zapisnici === |
| 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 | | }}} |
| 241 | | |
| | 219 | '''Потоа''' (материјализиран поглед)[[BR]] |
| | 220 | Со материјализиран поглед добиваме 388ms време на читање. |
| | 221 | [[Image(view4-materialized.png, 700px)]] |
| | 222 | Освежувањето (`REFRESH`) трае 1m27s. |
| | 223 | {{{#!sql |
| | 224 | REFRESH MATERIALIZED VIEW v_povtoreni_prekrsoci_mv; |
| | 225 | }}} |
| | 226 | |
| | 227 | === Поглед 5 — v_policaici_prosek_zapisnici_mv === |
| | 228 | Аналитички поглед — агрегација (`COUNT`, `MIN`, `MAX`) групирана по полицаец над цела `Zapisnik`, индекс не носи добивка. Решение: материјализација (дефиницијата е во делот Погледи). |
| | 229 | |
| | 230 | '''Прашалник кој го тестираме:''' |
| | 231 | {{{#!sql |
| | 232 | -- testirame za policaec so ime = 'Никола' |
| | 233 | SELECT * FROM v_policaici_prosek_zapisnici_mv WHERE policaec_ime = 'Никола'; |
| | 234 | }}} |
| | 235 | |
| | 236 | '''Пред''' (обичен аналитички поглед)[[BR]] |
| | 237 | време на извршување: 1,5s |
| 244 | | '''Време на извршување:''' градењето (`REFRESH`) трае ~3,234s; потоа читањето по `EMBG_P` е речиси моментално. |
| 245 | | |
| 246 | | === Поглед 6 — v_istorija_gragjanin === |
| 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 | | }}} |
| 261 | | |
| | 240 | '''Потоа''' (материјализиран поглед)[[BR]] |
| | 241 | Со материјализиран поглед добиваме <1s време на читање. |
| | 242 | [[Image(view5-materialized.png, 700px)]] |
| | 243 | Освежувањето (`REFRESH`) трае <2s. |
| | 244 | {{{#!sql |
| | 245 | REFRESH MATERIALIZED VIEW v_policaici_prosek_zapisnici_mv; |
| | 246 | }}} |
| | 247 | |
| | 248 | === Поглед 6 — v_istorija_gragjanin_mv === |
| | 249 | Аналитички поглед — две одделни агрегации (над `Zapisnik`/`Stavka_Zapisnik` и над `Uplata`) па join, двете страни се скенираат во целост. Решение: материјализација (дефиницијата е во делот Погледи). |
| | 250 | |
| | 251 | '''Прашалник кој го тестираме:''' |
| | 252 | {{{#!sql |
| | 253 | -- testirame za graganin so ime = 'Оливера' |
| | 254 | SELECT * FROM v_istorija_gragjanin_mv WHERE ime = 'Оливера'; |
| | 255 | }}} |
| | 256 | |
| | 257 | '''Пред''' (обичен аналитички поглед)[[BR]] |
| | 258 | време на извршување: 1m33s |
| 273 | | || v_povtoreni_prekrsoci || ~4,917s || брзо* || материјализиран поглед || |
| 274 | | || v_policaici_prosek_zapisnici || ~3,234s || брзо* || материјализиран поглед || |
| 275 | | || v_istorija_gragjanin || ~9,076s || брзо* || материјализиран поглед || |
| 276 | | |
| 277 | | '''*''' читањето од материјализиран поглед е речиси моментално; наведеното време е еднократната цена на градењето/освежувањето (`REFRESH`). |
| | 276 | || v_povtoreni_prekrsoci_mv || 1m8s || 388ms || материјализиран поглед || |
| | 277 | || v_policaici_prosek_zapisnici_mv || 1,5s || <1s || материјализиран поглед || |
| | 278 | || v_istorija_gragjanin_mv || 1m33s || <1s || материјализиран поглед || |
| | 279 | |
| | 280 | Кај материјализираните, „По" е времето на читање; освежувањето (`REFRESH`) трае 1m27s (поглед 4), <2s (поглед 5) и 2m17s (поглед 6). |