| | 129 | |
| | 130 | |
| | 131 | == View3: Анализа на поглед - **Нотификации по патник** |
| | 132 | |
| | 133 | 1. Примарен филтер за погледот vw_passenger_notifications ќе биде според PASSENGER_ID и STATUS на нотификацијата, бидејќи view-от ги прикажува сите нотификации по патник. |
| | 134 | 2. Примарен случај на употреба е прикажување на нотификации во мобилна апликација за конкретен патник. Без индекс, секое повикување скенира ја целата NOTIFICATION табела. |
| | 135 | 3. Иницијалното време за извршување на погледот е над 30 минути (query прекинат). Ова е неприфатливо за мобилна апликација, па затоа пристапуваме кон индексирање на NOTIFICATION табелата по PASSENGER_ID и STATUS. |
| | 136 | 4. Набљудувани операции се full scan на NOTIFICATION табелата без филтрирање по PASSENGER_ID. Времето изминато во извршување на query-то со индекс изнесува 4 секунди при SELECT *. |
| | 137 | 5. Бидејќи view-от во реална апликација секогаш се повикува за конкретен патник, извршуваме дополнителна проверка со филтер по PASSENGER_ID: |
| | 138 | {{{ |
| | 139 | EXPLAIN ANALYZE |
| | 140 | SELECT * FROM vw_passenger_notifications |
| | 141 | WHERE passenger_id = '1000'; |
| | 142 | }}} |
| | 143 | 6. Планерот користи Index Scan на idx_notification_passenger_status наместо Seq Scan, со време на извршување од 0.060 ms — што е практично моментално и целосно прифатливо за production употреба. |
| | 144 | {{{ |
| | 145 | Nested Loop (cost=0.87..24.98 rows=3 width=121) (actual time=0.024..0.025 rows=0 loops=1) |
| | 146 | -> Index Scan using pk_passenger on passenger p (cost=0.43..8.45 rows=1 width=24) (actual time=0.023..0.024 rows=0 loops=1) |
| | 147 | Index Cond: ((passenger_id)::text = '1000'::text) |
| | 148 | -> Index Scan using idx_notification_passenger_status on notification n (cost=0.43..16.49 rows=3 width=89) (never executed) |
| | 149 | Index Cond: ((passenger_id)::text = '1000'::text) |
| | 150 | Planning Time: 0.173 ms |
| | 151 | Execution Time: 0.053 ms |
| | 152 | }}} |
| | 153 | |
| | 154 | |
| | 155 | |