Changes between Version 3 and Version 4 of QueryOptimization


Ignore:
Timestamp:
05/26/26 22:11:45 (16 hours ago)
Author:
231088
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • QueryOptimization

    v3 v4  
    111111
    112112Со додавањето на индексите planner-от започна да користи индексно пребарување наместо {{{Parallel Sequential Scan}}}, што овозможи побрзо извршување на query-ите и подобар execution plan.
     113
     114
     115
     116== 2. Анализа и оптимизација на vw_client_booking_history ==
     117
     118Погледот {{{vw_client_booking_history}}} се користи за прикажување на историјата на booking-ите на клиентите, нивниот статус и информациите за плаќање.
     119
     120Прашалниците кои беа тестирани се следните:
     121
     122{{{
     123-- 2.1
     124SELECT *
     125FROM vw_client_booking_history
     126WHERE client_id = 1500;
     127
     128-- 2.2
     129SELECT *
     130FROM vw_client_booking_history
     131WHERE payment_status = 'PAID';
     132}}}
     133
     134=== Време на извршување без индекси ===
     135
     136'''2.1 - 478.399 ms'''
     137
     138{{{
     139Nested Loop  (cost=394513.00..438192.78 rows=3976 width=58) (actual time=434.407..443.008 rows=0 loops=1)
     140  ->  Gather
     141        ->  Parallel Hash Right Join
     142              ->  Parallel Seq Scan on payment p
     143              ->  Parallel Seq Scan on bookingrequest br
     144                    Filter: (client_id = 1500)
     145Planning Time: 44.765 ms
     146Execution Time: 478.399 ms
     147}}}
     148
     149'''2.2 - 159.853 ms'''
     150
     151{{{
     152Nested Loop  (cost=1001.86..42632.01 rows=1 width=58) (actual time=142.971..159.779 rows=0 loops=1)
     153  ->  Gather
     154        ->  Parallel Seq Scan on payment p
     155              Filter: ((payment_status)::text = 'PAID'::text)
     156Planning Time: 1.571 ms
     157Execution Time: 159.853 ms
     158}}}
     159
     160При почетната анализа беше забележано дека PostgreSQL користи {{{Parallel Sequential Scan}}} врз табелите {{{BookingRequest}}}, {{{Booking}}} и {{{Payment}}}. Ова предизвикуваше значително време на извршување, особено кај query-ите што пребаруваат според клиент или статус на плаќање.
     161
     162За оптимизација беа додадени следните индекси:
     163
     164{{{
     165CREATE INDEX idx_bookingrequest_client
     166ON BookingRequest(client_id);
     167
     168CREATE INDEX idx_offer_request
     169ON Offer(request_id);
     170
     171CREATE INDEX idx_booking_offer
     172ON Booking(offer_id);
     173
     174CREATE INDEX idx_booking_status
     175ON Booking(booking_status);
     176
     177CREATE INDEX idx_payment_booking
     178ON Payment(booking_id);
     179
     180CREATE INDEX idx_payment_status
     181ON Payment(payment_status);
     182
     183CREATE INDEX idx_bookable_id
     184ON Bookable(bookable_id);
     185}}}
     186
     187=== Време на извршување со индекси ===
     188
     189'''2.1 - 44.997 ms'''
     190
     191{{{
     192Nested Loop  (cost=1115.31..63410.15 rows=3975 width=58) (actual time=38.480..44.907 rows=0 loops=1)
     193  ->  Parallel Bitmap Heap Scan on bookingrequest br
     194        ->  Bitmap Index Scan on idx_bookingrequest_client
     195  ->  Index Scan using idx_offer_request on offer o
     196  ->  Index Scan using idx_booking_offer on booking bk
     197Planning Time: 2.529 ms
     198Execution Time: 44.997 ms
     199}}}
     200
     201'''2.2 - 0.114 ms'''
     202
     203{{{
     204Nested Loop  (cost=2.29..14.64 rows=1 width=58) (actual time=0.047..0.049 rows=0 loops=1)
     205  ->  Index Scan using idx_payment_status on payment p
     206Planning Time: 2.188 ms
     207Execution Time: 0.114 ms
     208}}}
     209
     210По оптимизацијата PostgreSQL започна да користи:
     211
     212 * {{{Bitmap Index Scan}}}
     213 * {{{Index Scan}}}
     214 * {{{Index Only Scan}}}
     215
     216Најголемо подобрување беше забележано кај query-от што пребарува според {{{payment_status}}}, каде времето на извршување се намали:
     217
     218 * од ~159 ms
     219 * на ~0.1 ms
     220
     221Исто така, query-от што пребарува според {{{client_id}}} се подобри:
     222
     223 * од ~478 ms
     224 * на ~44 ms
     225
     226Со додавањето на индексите planner-от започна да користи индексно пребарување наместо {{{Parallel Sequential Scan}}}, што овозможи значително побрзо извршување на query-ите и подобар execution plan.