| | 271 | === Сценарио 3 |
| | 272 | |
| | 273 | Ќе разгледуваме прашалник кој ги наоѓа сите песни кои припаѓаат на одреден албум. |
| | 274 | |
| | 275 | {{{ |
| | 276 | select * |
| | 277 | from songs s |
| | 278 | left join albums a on a.id = s.album_id |
| | 279 | where s.album_id = :albumId; |
| | 280 | }}} |
| | 281 | |
| | 282 | Од претходните примери веќе имаме генерирано доволно записи во потребните табели. |
| | 283 | |
| | 284 | Додаваме индекс на `album_id` |
| | 285 | |
| | 286 | {{{ |
| | 287 | CREATE INDEX ON songs(album_id); |
| | 288 | }}} |
| | 289 | |
| | 290 | Без индекс добиваме: |
| | 291 | +-------------------------------------------------------------------------------------------------------------------------------------+ |
| | 292 | |QUERY PLAN | |
| | 293 | +-------------------------------------------------------------------------------------------------------------------------------------+ |
| | 294 | |Nested Loop Left Join (cost=1000.15..11058.40 rows=5 width=36) (actual time=5.216..57.666 rows=3 loops=1) | |
| | 295 | | -> Gather (cost=1000.00..11050.17 rows=5 width=28) (actual time=5.196..57.634 rows=3 loops=1) | |
| | 296 | | Workers Planned: 2 | |
| | 297 | | Workers Launched: 2 | |
| | 298 | | -> Parallel Seq Scan on songs s (cost=0.00..10049.67 rows=2 width=28) (actual time=11.406..27.456 rows=1 loops=3) | |
| | 299 | | Filter: (album_id = 5494023) | |
| | 300 | | Rows Removed by Filter: 266666 | |
| | 301 | | -> Materialize (cost=0.15..8.18 rows=1 width=8) (actual time=0.006..0.006 rows=0 loops=3) | |
| | 302 | | -> Index Only Scan using albums_pkey on albums a (cost=0.15..8.17 rows=1 width=8) (actual time=0.012..0.013 rows=0 loops=1)| |
| | 303 | | Index Cond: (id = 5494023) | |
| | 304 | | Heap Fetches: 0 | |
| | 305 | |Planning Time: 0.191 ms | |
| | 306 | |Execution Time: 57.726 ms | |
| | 307 | +-------------------------------------------------------------------------------------------------------------------------------------+ |
| | 308 | |
| | 309 | Просечно `Execution time` е **56,24ms**. |
| | 310 | |
| | 311 | По додавање на индекс: |
| | 312 | +-------------------------------------------------------------------------------------------------------------------------------------+ |
| | 313 | |QUERY PLAN | |
| | 314 | +-------------------------------------------------------------------------------------------------------------------------------------+ |
| | 315 | |Nested Loop Left Join (cost=4.62..32.33 rows=5 width=36) (actual time=0.048..0.054 rows=3 loops=1) | |
| | 316 | | -> Bitmap Heap Scan on songs s (cost=4.46..24.09 rows=5 width=28) (actual time=0.036..0.041 rows=3 loops=1) | |
| | 317 | | Recheck Cond: (album_id = 5494023) | |
| | 318 | | Heap Blocks: exact=3 | |
| | 319 | | -> Bitmap Index Scan on idx_songs_album (cost=0.00..4.46 rows=5 width=0) (actual time=0.024..0.024 rows=3 loops=1) | |
| | 320 | | Index Cond: (album_id = 5494023) | |
| | 321 | | -> Materialize (cost=0.15..8.18 rows=1 width=8) (actual time=0.003..0.003 rows=0 loops=3) | |
| | 322 | | -> Index Only Scan using albums_pkey on albums a (cost=0.15..8.17 rows=1 width=8) (actual time=0.007..0.007 rows=0 loops=1)| |
| | 323 | | Index Cond: (id = 5494023) | |
| | 324 | | Heap Fetches: 0 | |
| | 325 | |Planning Time: 0.155 ms | |
| | 326 | |Execution Time: 0.090 ms | |
| | 327 | +-------------------------------------------------------------------------------------------------------------------------------------+ |
| | 328 | |
| | 329 | Просечно `Execution time` е сега **0.092ms**. Можеме да забележиме користење на индекс преку `Bitmap Index Scan on idx_songs_album`. |