| Version 2 (modified by , 5 days ago) ( diff ) |
|---|
QueryOptimization
View1: Анализа на поглед - Активни возења
- Примарен филтер за погледот vw_active_trips ќе биде според STATUS на патувањето ('SCHEDULED', 'IN_PROGRESS'), бидејќи view-от ги прикажува само активните возења во моментот.
- Примарен случај на употреба е за real-time мониторинг на активни возења. За овој поглед ни се важни перформансите, бидејќи се користи континуирано.
- Иницијалното време за извршување на погледот е 7.38 секунди. Ова не е прифатливо време за апликација која треба да прикажува live статус на возења, па затоа пристапуваме кон индексирање на колоната STATUS во табелата TRIP.
- Набљудувани операции се full scan на табелата TRIP без индекс на колоната STATUS, со повеќе Hash Join операции низ ROUTE, VEHICLE, DRIVER и EMPLOYEE табелите.
- Времето изминато во извршување на query-то со индекс изнесува 485 ms (0.48 секунди), и тоа е прифатливо подобрување — 15 пати побрзо.
Hash Left Join (cost=3171.49..15071.96 rows=135727 width=287) (actual time=31.892..479.130 rows=135807 loops=1)
Hash Cond: (t.vehicle_type_id = vt.vehicle_type_id)
-> Hash Join (cost=3151.59..14013.71 rows=135727 width=155) (actual time=31.841..429.095 rows=135807 loops=1)
Hash Cond: ((dr.employee_id)::text = (e.employee_id)::text)
-> Hash Join (cost=2048.09..12553.87 rows=135727 width=147) (actual time=17.571..354.868 rows=135807 loops=1)
Hash Cond: ((t.driver_id)::text = (dr.driver_id)::text)
-> Hash Join (cost=1670.84..11820.22 rows=135727 width=139) (actual time=11.744..290.015 rows=135807 loops=1)
Hash Cond: ((t.vehicle_id)::text = (v.vehicle_id)::text)
-> Hash Join (cost=1504.34..11297.13 rows=135727 width=123) (actual time=9.158..232.483 rows=135807 loops=1)
Hash Cond: ((t.route_id)::text = (r.route_id)::text)
-> Bitmap Heap Scan on trip t (cost=1456.72..10891.31 rows=135727 width=97) (actual time=8.634..168.601 rows=135807 loops=1)
Recheck Cond: ((status)::text = ANY ('{SCHEDULED,IN_PROGRESS}'::text[]))
Heap Blocks: exact=7738
-> Bitmap Index Scan on idx_trip_status (cost=0.00..1422.79 rows=135727 width=0) (actual time=7.136..7.136 rows=135807 loops=1)
Index Cond: ((status)::text = ANY ('{SCHEDULED,IN_PROGRESS}'::text[]))
-> Hash (cost=37.83..37.83 rows=783 width=41) (actual time=0.458..0.458 rows=783 loops=1)
Buckets: 1024 Batches: 1 Memory Usage: 65kB
-> Seq Scan on route r (cost=0.00..37.83 rows=783 width=41) (actual time=0.053..0.216 rows=783 loops=1)
-> Hash (cost=104.00..104.00 rows=5000 width=21) (actual time=2.512..2.513 rows=5000 loops=1)
Buckets: 8192 Batches: 1 Memory Usage: 329kB
-> Seq Scan on vehicle v (cost=0.00..104.00 rows=5000 width=21) (actual time=0.009..1.018 rows=5000 loops=1)
-> Hash (cost=221.00..221.00 rows=12500 width=20) (actual time=5.693..5.693 rows=12500 loops=1)
Buckets: 16384 Batches: 1 Memory Usage: 771kB
-> Seq Scan on driver dr (cost=0.00..221.00 rows=12500 width=20) (actual time=0.021..2.062 rows=12500 loops=1)
-> Hash (cost=791.00..791.00 rows=25000 width=20) (actual time=14.020..14.021 rows=25000 loops=1)
Buckets: 32768 Batches: 1 Memory Usage: 1542kB
-> Seq Scan on employee e (cost=0.00..791.00 rows=25000 width=20) (actual time=0.025..6.289 rows=25000 loops=1)
-> Hash (cost=14.40..14.40 rows=440 width=122) (actual time=0.037..0.038 rows=3 loops=1)
Buckets: 1024 Batches: 1 Memory Usage: 9kB
-> Seq Scan on vehicle_type vt (cost=0.00..14.40 rows=440 width=122) (actual time=0.010..0.012 rows=3 loops=1)
Planning Time: 4.422 ms
Execution Time: 485.098 ms
- По индексирање, планерот користи Bitmap Index Scan на idx_trip_status наместо Seq Scan, со што филтрирањето на 135,807 активни возења се врши директно преку индексот.
Note:
See TracWiki
for help on using the wiki.
