Как стать автором
Обновить

Комментарии 1

Мне показалось автор перемудрил. Из разряда ну зачем то же нужны эти CTE. Так и не понял что смутило в оконных функциях.


SELECT id, SUM(d) OVER tzw2
FROM
  (
    SELECT 2 - (LAG(y, 1, 0) OVER tzw = y AND LAG(x, 1, -1) OVER tzw = x - 1) AS d, y ,x ,id
    FROM seats 
    WHERE venue_id = @venue_id 
    WINDOW tzw AS (ORDER BY y, x)
  ) t WINDOW tzw2 AS (ORDER BY y, x);

я не специалист в MySQL, пускай тот кто понимает объяснит чем этот ANALYZE хуже? Судя по кост модели так гораздо выгодней и имхо читабельней.


| -> Window aggregate with buffering: sum(t.d) OVER tzw2  (actual time=0.132..0.139 rows=5 loops=1)
    -> Sort: t.y, t.x  (actual time=0.008..0.008 rows=5 loops=1)
        -> Table scan on t  (actual time=0.000..0.001 rows=5 loops=1)
            -> Materialize  (actual time=0.121..0.122 rows=5 loops=1)
                -> Window aggregate with buffering: lag(seats.x,1,-(1)) OVER tzw, lag(seats.y,1,0) OVER tzw  (actual time=0.051..0.106 rows=5 loops=1)
                    -> Sort: seats.y, seats.x  (cost=0.75 rows=5) (actual time=0.030..0.031 rows=5 loops=1)
                        -> Index lookup on seats using venue_id_y_x (venue_id=(@venue_id))  (actual time=0.015..0.018 rows=5 loops=1)
 |
Зарегистрируйтесь на Хабре, чтобы оставить комментарий