| 205 | | |
| 206 | | |
| 207 | | |
| 208 | | |
| 209 | | |
| 210 | | |
| 211 | | |
| 212 | | |
| 213 | | |
| 214 | | |
| | 205 | {{{ |
| | 206 | Sort (cost=699.80..701.65 rows=737 width=863) (actual time=3.782..3.831 rows=736 loops=1) |
| | 207 | Sort Key: p.datum DESC |
| | 208 | Sort Method: quicksort Memory: 167kB |
| | 209 | -> Nested Loop (cost=11.67..664.70 rows=737 width=863) (actual time=0.107..3.410 rows=736 loops=1) |
| | 210 | -> Hash Join (cost=11.51..637.59 rows=737 width=726) (actual time=0.094..2.957 rows=736 loops=1) |
| | 211 | Hash Cond: (p.evidentiranood_id = k.id) |
| | 212 | -> Nested Loop (cost=0.16..624.17 rows=737 width=95) (actual time=0.059..2.692 rows=736 loops=1) |
| | 213 | -> Seq Scan on prisustvo p (cost=0.00..601.99 rows=737 width=79) (actual time=0.033..2.300 rows=736 loops=1) |
| | 214 | Filter: ((datum >= '2026-09-01'::date) AND (datum <= '2026-12-31'::date) AND (seodnesuvanaucenikot_id = '18d82d24-9d9f-4c0b-9692-f7a87174cb4c'::uuid)) |
| | 215 | Rows Removed by Filter: 17435 |
| | 216 | -> Memoize (cost=0.16..0.25 rows=1 width=16) (actual time=0.000..0.000 rows=1 loops=736) |
| | 217 | Cache Key: p.evidentiranood_id |
| | 218 | Cache Mode: logical |
| | 219 | Hits: 721 Misses: 15 Evictions: 0 Overflows: 0 Memory Usage: 2kB |
| | 220 | -> Index Only Scan using nastavnik_pkey on nastavnik n (cost=0.15..0.24 rows=1 width=16) (actual time=0.002..0.002 rows=1 loops=15) |
| | 221 | Index Cond: (id = p.evidentiranood_id) |
| | 222 | Heap Fetches: 15 |
| | 223 | -> Hash (cost=10.60..10.60 rows=60 width=663) (actual time=0.026..0.027 rows=26 loops=1) |
| | 224 | Buckets: 1024 Batches: 1 Memory Usage: 11kB |
| | 225 | -> Seq Scan on korisnik k (cost=0.00..10.60 rows=60 width=663) (actual time=0.010..0.016 rows=26 loops=1) |
| | 226 | -> Memoize (cost=0.16..0.24 rows=1 width=153) (actual time=0.000..0.000 rows=1 loops=736) |
| | 227 | Cache Key: p.zacasot_id |
| | 228 | Cache Mode: logical |
| | 229 | Hits: 699 Misses: 37 Evictions: 0 Overflows: 0 Memory Usage: 7kB |
| | 230 | -> Index Scan using cas_pkey on cas c (cost=0.15..0.23 rows=1 width=153) (actual time=0.001..0.001 rows=1 loops=37) |
| | 231 | Index Cond: (id = p.zacasot_id) |
| | 232 | Planning Time: 0.436 ms |
| | 233 | Execution Time: 3.960 ms |
| | 234 | }}} |
| | 235 | |
| | 236 | Можеме да видиме дека |
| | 237 | * Planning Time е: 0.436 ms |
| | 238 | * Execution Time: 3.960 ms |
| | 239 | * Начин на скенирање: Seq Scan |
| | 240 | * Се користи quick sort алгоритам |
| | 241 | * Се користи index за наставникот кој го внел присуството: evidentiranood_id |
| | 242 | * Се користи index за часот за кој е присуството. |
| | 243 | |
| | 244 | = Предложени индекси = |
| | 245 | 1. Индекс за филтрирање на ученикот и датумот |
| | 246 | {{{ |
| | 247 | CREATE INDEX idx_prisustvo_ucenik_datum |
| | 248 | ON prisustvo (seOdnesuvaNaUcenikot_Id, datum DESC); |
| | 249 | }}} |
| | 250 | 2. Индекси за наставникот, но и за часот |
| | 251 | {{{ |
| | 252 | CREATE INDEX idx_prisustvo_evidentiranood ON prisustvo (evidentiranoOd_Id); |
| | 253 | CREATE INDEX idx_prisustvo_zacasot ON prisustvo (zaCasot_Id); |
| | 254 | }}} |
| | 255 | |
| | 256 | **Анализа после додавање на индексите: |
| | 257 | ** |
| | 258 | |
| | 259 | {{{ |
| | 260 | Sort (cost=357.31..359.15 rows=737 width=176) (actual time=1.400..1.452 rows=736 loops=1) |
| | 261 | Sort Key: p.datum DESC |
| | 262 | Sort Method: quicksort Memory: 167kB |
| | 263 | -> Hash Join (cost=18.53..322.21 rows=737 width=176) (actual time=0.154..0.992 rows=736 loops=1) |
| | 264 | Hash Cond: (p.zacasot_id = c.id) |
| | 265 | -> Hash Join (cost=16.67..318.21 rows=737 width=138) (actual time=0.115..0.714 rows=736 loops=1) |
| | 266 | Hash Cond: (p.evidentiranood_id = k.id) |
| | 267 | -> Hash Join (cost=15.09..314.38 rows=737 width=95) (actual time=0.081..0.446 rows=736 loops=1) |
| | 268 | Hash Cond: (p.evidentiranood_id = n.id) |
| | 269 | -> Bitmap Heap Scan on prisustvo p (cost=13.68..310.58 rows=737 width=79) (actual time=0.058..0.187 rows=736 loops=1) |
| | 270 | Recheck Cond: ((seodnesuvanaucenikot_id = '18d82d24-9d9f-4c0b-9692-f7a87174cb4c'::uuid) AND (datum >= '2026-09-01'::date) AND (datum <= '2026-12-31'::date)) |
| | 271 | Heap Blocks: exact=12 |
| | 272 | -> Bitmap Index Scan on idx_prisustvo_ucenik_datum (cost=0.00..13.50 rows=737 width=0) (actual time=0.044..0.045 rows=736 loops=1) |
| | 273 | Index Cond: ((seodnesuvanaucenikot_id = '18d82d24-9d9f-4c0b-9692-f7a87174cb4c'::uuid) AND (datum >= '2026-09-01'::date) AND (datum <= '2026-12-31'::date)) |
| | 274 | -> Hash (cost=1.18..1.18 rows=18 width=16) (actual time=0.013..0.014 rows=18 loops=1) |
| | 275 | Buckets: 1024 Batches: 1 Memory Usage: 9kB |
| | 276 | -> Seq Scan on nastavnik n (cost=0.00..1.18 rows=18 width=16) (actual time=0.006..0.009 rows=18 loops=1) |
| | 277 | -> Hash (cost=1.26..1.26 rows=26 width=75) (actual time=0.027..0.028 rows=26 loops=1) |
| | 278 | Buckets: 1024 Batches: 1 Memory Usage: 11kB |
| | 279 | -> Seq Scan on korisnik k (cost=0.00..1.26 rows=26 width=75) (actual time=0.010..0.017 rows=26 loops=1) |
| | 280 | -> Hash (cost=1.38..1.38 rows=38 width=54) (actual time=0.032..0.032 rows=38 loops=1) |
| | 281 | Buckets: 1024 Batches: 1 Memory Usage: 12kB |
| | 282 | -> Seq Scan on cas c (cost=0.00..1.38 rows=38 width=54) (actual time=0.016..0.021 rows=38 loops=1) |
| | 283 | Planning Time: 0.832 ms |
| | 284 | Execution Time: 1.548 ms |
| | 285 | }}} |
| | 286 | |
| | 287 | Може да се забележи: |
| | 288 | * Planning Time: 0.832 ms |
| | 289 | * Execution Time: 1.548 ms |
| | 290 | * Bitmap Index Scan, Bitmap Heap Scan |
| | 291 | * Се користи индексот: idx_prisustvo_ucenik_datum |
| | 292 | * Немаме rows removed |
| | 293 | |
| | 294 | ** Заклучок ** |
| | 295 | Можеме да забележиме дека времето на извршување се намали за 2 милисекунди. Овој пример работи само на ~30 ученици. Но доколку имаме повеќе тогаш перформансите би биле подобри. Исто така немаме тргање на редици, при филтрирањето, туку се зимаат тие што се потребни. |
| | 296 | |
| | 297 | |
| | 298 | = Сценарио 1 - Плаќање преку metamusk = |
| | 299 | |
| | 300 | |
| | 301 | |
| | 302 | |
| | 303 | |
| | 304 | |
| | 305 | |
| | 306 | |
| | 307 | |
| | 308 | |
| | 309 | |
| | 310 | |
| | 311 | |