Ihre ursprüngliche Abfrage ist ziemlich clever. Hier ist ein etwas anderer Ansatz. Es erhält den nächsten Bereich in einer Unterabfrage (unter Verwendung einer korrelierten Unterabfrage wie in Ihrem Beispiel). Anschließend werden die Zeilen gezählt, in denen die Bedingungen wahr sind:
select sum(case when area = 'Front' and nextarea = 'Back' then 1 else 0 end)
from (SELECT t1.*,
(SELECT t2.area
FROM table t2
where t2.order > t1.order
order by t2.order
limit 1
) as nextarea
FROM table t1;
Diese Abfrage ist teurer als Ihre. Sie konnten eine schöne Gleichheitsbedingung für die order
verwenden Säule. Hier wird eine Sortierung mit dem limit
benötigt um den nächsten Wert zu erhalten. Ein zusammengesetzter Index für (order, area)
sollte die Leistung verbessern.