Changes between Version 7 and Version 8 of Profiling


Ignore:
Timestamp:
02/10/26 20:14:30 (3 weeks ago)
Author:
222039
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • Profiling

    v7 v8  
    5353[[Image(F4 IMG 2.png)]]
    5454
     55```-> Limit: 100 row(s)  (actual time=68039..68039 rows=100 loops=1)
     56     -> Sort: load_factor DESC, limit input to 100 row(s) per chunk  (actual time=68039..68039 rows=100 loops=1)
     57         -> Stream results  (cost=127262 rows=230643) (actual time=1.01..6782...```
     58
    5559Од следните анализи може да се дојде до заклучок дека овој прашалник не е најоптимален поради тоа што correlated subqueries создаваат row-by-row извршување (nested loops) и повторено читање на истата табела, што е скапо кај големи datasets.
    5660
     
    6064
    6165=== Оптимизација 1
     66
     67Идеја: еднаш да агрегираме booking по flight_id (COUNT и AVG), па потоа само join-ираме.
     68
     69{{{
     70SELECT
     71  f.flight_id,
     72  al.airlinename,
     73  f.flightno,
     74  f.`from`,
     75  f.`to`,
     76  f.departure,
     77  f.arrival,
     78  a.capacity,
     79  bx.booked_seats,
     80  bx.avg_price,
     81  bx.booked_seats / a.capacity AS load_factor
     82FROM flight f
     83JOIN airline al ON al.airline_id = f.airline_id
     84JOIN airplane a ON a.airplane_id = f.airplane_id
     85JOIN (
     86  SELECT
     87    b.flight_id,
     88    COUNT(*) AS booked_seats,
     89    AVG(b.price) AS avg_price
     90  FROM booking b
     91  GROUP BY b.flight_id
     92) bx ON bx.flight_id = f.flight_id
     93WHERE f.departure >= CURDATE()
     94  AND f.departure < DATE_ADD(CURDATE(), INTERVAL 1 DAY)
     95  AND bx.booked_seats > 0
     96ORDER BY load_factor DESC
     97LIMIT 100;
     98}}}