Changes between Version 4 and Version 5 of QueryOptimization


Ignore:
Timestamp:
06/12/26 23:30:22 (4 days ago)
Author:
231025
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • QueryOptimization

    v4 v5  
    152152}}}
    153153
     154'''Прашалник кој го тестираме:'''
     155{{{#!sql
     156-- testirame za prekrsuvac so EMBG = '1508004480145'
     157SELECT * FROM v_site_zapisnici WHERE embg_prekrsuvach = '1508004480145';
     158}}}
     159
    154160'''Без индекс'''[[BR]]
    155161време на извршување: 6m4s
     
    167173}}}
    168174
     175'''Прашалник кој го тестираме:'''
     176{{{#!sql
     177-- testirame za prekrsitel so EMBG = '0412992470302'
     178SELECT * FROM v_zapisnici_detalno WHERE embg_prekrsitel = '0412992470302';
     179}}}
     180
    169181'''Без индекс'''[[BR]]
    170182време на извршување: 5m59s
     
    178190Најбавна операција: `Seq Scan on uplata`. Join-условот (`u.id_zapisnik = z.id_na_zapisnik`) е ист како кај Поглед 2, '''па не е потребен нов индекс''' — се реискористува постоечкиот `idx_uplata_id_zapisnik`.
    179191
     192'''Прашалник кој го тестираме:'''
     193{{{#!sql
     194-- testirame za prekrsitel so EMBG = '0412992470302'
     195SELECT * FROM v_neplateni_kazni WHERE embg_prekrsitel = '0412992470302';
     196}}}
     197
    180198'''Без индекс'''[[BR]]
    181199време на извршување: 6,922s
     
    187205
    188206=== Поглед 4 — v_povtoreni_prekrsoci ===
    189 Аналитички поглед. План: `GROUP BY` / `HashAggregate` над цела `Zapisnik` — агрегацијата ги поминува сите редови, индекс не помага. Решение — '''материјализиран поглед'''; INSERT/UPDATE на основните табели остануваат исти.
     207Аналитички поглед. План: `GROUP BY` / `HashAggregate` над цела `Zapisnik` — агрегацијата ги поминува сите редови, индекс не помага. Затоа го материјализираме (`_mv`); резултатот се пресметува еднаш и се чита готов:
     208{{{#!sql
     209DROP VIEW v_povtoreni_prekrsoci;
     210
     211CREATE 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'
     219SELECT * FROM v_povtoreni_prekrsoci_mv WHERE embg = '0412992470302';
     220}}}
    190221
    191222[[Image(view4.png, 700px)]]
    192223
    193 '''Време на извршување:''' ~4,917s
     224'''Време на извршување:''' градењето (`REFRESH`) трае ~4,917s; потоа читањето по `EMBG` е речиси моментално.
    194225
    195226=== Поглед 5 — v_policaici_prosek_zapisnici ===
    196 Аналитички поглед. План: агрегација (`COUNT`, `MIN`, `MAX`) групирана по полицаец над цела `Zapisnik` — индекс не носи добивка. Решение — '''материјализиран поглед''' со периодично освежување.
     227Аналитички поглед. План: агрегација (`COUNT`, `MIN`, `MAX`) групирана по полицаец над цела `Zapisnik` — индекс не носи добивка. Затоа го материјализираме (`_mv`):
     228{{{#!sql
     229DROP VIEW v_policaici_prosek_zapisnici;
     230
     231CREATE 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'
     239SELECT * FROM v_policaici_prosek_zapisnici_mv WHERE embg_p = '3007982480021';
     240}}}
    197241
    198242[[Image(view5.png, 700px)]]
    199243
    200 '''Време на извршување:''' ~3,234s
     244'''Време на извршување:''' градењето (`REFRESH`) трае ~3,234s; потоа читањето по `EMBG_P` е речиси моментално.
    201245
    202246=== Поглед 6 — v_istorija_gragjanin ===
    203 Аналитички поглед. План: две одделни агрегации (над `Zapisnik`/`Stavka_Zapisnik` и над `Uplata`) па join — двете страни се скенираат во целост. Решение — '''материјализиран поглед''' со периодично освежување.
     247Аналитички поглед. План: две одделни агрегации (над `Zapisnik`/`Stavka_Zapisnik` и над `Uplata`) па join — двете страни се скенираат во целост. Затоа го материјализираме (`_mv`):
     248{{{#!sql
     249DROP VIEW v_istorija_gragjanin;
     250
     251CREATE 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'
     259SELECT * FROM v_istorija_gragjanin_mv WHERE embg = '0412992470302';
     260}}}
    204261
    205262[[Image(view6.png, 700px)]]
    206263
    207 '''Време на извршување:''' ~9,076s
     264'''Време на извршување:''' градењето (`REFRESH`) трае ~9,076s; потоа читањето по `EMBG` е речиси моментално.
    208265
    209266
     
    214271|| v_zapisnici_detalno || 5m59s || ~154ms || индекс ||
    215272|| v_neplateni_kazni || 6,922s || ~121ms || постоечки индекс ||
    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`).