Changes between Version 16 and Version 17 of Profiling


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

--

Legend:

Unmodified
Added
Removed
Modified
  • Profiling

    v16 v17  
    6767=== Оптимизација 1
    6868
     69Прво издвојуваме утрешни flight_id со  CTE, па агрегираме само за нив.
     70
     71{{{
     72WITH tomorrow_flights AS (
     73  SELECT flight_id, airline_id, airplane_id, flightno, `from`, `to`, departure, arrival
     74  FROM flight
     75  WHERE departure >= CURDATE()
     76    AND departure < DATE_ADD(CURDATE(), INTERVAL 1 DAY)
     77),
     78booking_x AS (
     79  SELECT b.flight_id, COUNT(*) AS booked_seats, AVG(b.price) AS avg_price
     80  FROM booking b
     81  JOIN tomorrow_flights tf ON tf.flight_id = b.flight_id
     82  GROUP BY b.flight_id
     83)
     84SELECT
     85  tf.flight_id,
     86  al.airlinename,
     87  tf.flightno,
     88  tf.`from`,
     89  tf.`to`,
     90  tf.departure,
     91  tf.arrival,
     92  a.capacity,
     93  bx.booked_seats,
     94  bx.avg_price,
     95  bx.booked_seats / a.capacity AS load_factor
     96FROM tomorrow_flights tf
     97JOIN booking_x bx ON bx.flight_id = tf.flight_id
     98JOIN airline al ON al.airline_id = tf.airline_id
     99JOIN airplane a ON a.airplane_id = tf.airplane_id
     100ORDER BY load_factor DESC
     101LIMIT 100;
     102}}}
     103
     104=== Оптимизација 2 (Уште пооптимизирано)
     105
    69106Идеја: еднаш да агрегираме booking по flight_id (COUNT и AVG), па потоа само join-ираме.
    70107
     
    114151* Се намалува I/O и број на обработени редови.
    115152
    116 === Оптимизација 2 (Уште пооптимизирано)
    117 
    118 Прво издвојуваме утрешни flight_id со  CTE, па агрегираме само за нив.
    119 
    120 {{{
    121 WITH tomorrow_flights AS (
    122   SELECT flight_id, airline_id, airplane_id, flightno, `from`, `to`, departure, arrival
    123   FROM flight
    124   WHERE departure >= CURDATE()
    125     AND departure < DATE_ADD(CURDATE(), INTERVAL 1 DAY)
    126 ),
    127 booking_x AS (
    128   SELECT b.flight_id, COUNT(*) AS booked_seats, AVG(b.price) AS avg_price
    129   FROM booking b
    130   JOIN tomorrow_flights tf ON tf.flight_id = b.flight_id
    131   GROUP BY b.flight_id
    132 )
    133 SELECT
    134   tf.flight_id,
    135   al.airlinename,
    136   tf.flightno,
    137   tf.`from`,
    138   tf.`to`,
    139   tf.departure,
    140   tf.arrival,
    141   a.capacity,
    142   bx.booked_seats,
    143   bx.avg_price,
    144   bx.booked_seats / a.capacity AS load_factor
    145 FROM tomorrow_flights tf
    146 JOIN booking_x bx ON bx.flight_id = tf.flight_id
    147 JOIN airline al ON al.airline_id = tf.airline_id
    148 JOIN airplane a ON a.airplane_id = tf.airplane_id
    149 ORDER BY load_factor DESC
    150 LIMIT 100;
    151 }}}