Changes between Version 3 and Version 4 of QueryOptimization


Ignore:
Timestamp:
05/20/26 17:33:51 (5 days ago)
Author:
231151
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • QueryOptimization

    v3 v4  
    127127
    1281286. По индексирање планот сеуште користи Seq Scan на DRIVER_SCHEDULE и CONDUCTOR_SCHEDULE бидејќи query-от враќа целата содржина на табелите — индексите помагаат при филтрирање по конкретен датум или вработен, не при SELECT *.
     129
     130
     131== View3: Анализа на поглед - **Нотификации по патник**
     132
     1331. Примарен филтер за погледот vw_passenger_notifications ќе биде според PASSENGER_ID и STATUS на нотификацијата, бидејќи view-от ги прикажува сите нотификации по патник.
     1342. Примарен случај на употреба е прикажување на нотификации во мобилна апликација за конкретен патник. Без индекс, секое повикување скенира ја целата NOTIFICATION табела.
     1353. Иницијалното време за извршување на погледот е над 30 минути (query прекинат). Ова е неприфатливо за мобилна апликација, па затоа пристапуваме кон индексирање на NOTIFICATION табелата по PASSENGER_ID и STATUS.
     1364. Набљудувани операции се full scan на NOTIFICATION табелата без филтрирање по PASSENGER_ID. Времето изминато во извршување на query-то со индекс изнесува 4 секунди при SELECT *.
     1375. Бидејќи view-от во реална апликација секогаш се повикува за конкретен патник, извршуваме дополнителна проверка со филтер по PASSENGER_ID:
     138{{{
     139   EXPLAIN ANALYZE
     140   SELECT * FROM vw_passenger_notifications
     141   WHERE passenger_id = '1000';
     142}}}
     1436. Планерот користи Index Scan на idx_notification_passenger_status наместо Seq Scan, со време на извршување од 0.060 ms — што е практично моментално и целосно прифатливо за production употреба.
     144{{{
     145Nested 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)
     150Planning Time: 0.173 ms
     151Execution Time: 0.053 ms
     152}}}
     153
     154
     155