Как насчет использования ключевого слова IN
вместо нескольких OR
. Кроме того, вам не нужно указывать AND segments.segmentstart > "00:00:00"
, поскольку вы уже указали условие segments.segmentstart >= TIME(DATE_ADD(now(), INTERVAL "07:00" HOUR_MINUTE))
, которое больше "00:00:00"
. Наконец, индексация ваших ключей будет хорошей идеей для оптимизации выполнения.
select trips.tripid as tripid
, stops.stopdescrption as "perron"
, DATE_FORMAT(segments.segmentstart, "%H:%i") as "time"
, DATE_FORMAT( trips.tripend, "%H:%i") as "arrival"
, UPPER(routes.routepublicidentifier) as "lijn"
, plcend.placedescrption as "destination"
from calendar
join trips on calendar.vsid=trips.vsid
join routes on routes.routeid=trips.routeid
join places plcstart on plcstart.placeid=trips.placeidstart
join places plcend on plcend.placeid=trips.placeidend
join segments on segments.tripid = trips.tripid
join stops on segments.stopid = stops.stopid
where stops.stopid IN (:perrons0,
:perrons1,:perrons2,
:perrons3, :perrons4,
:perrons5, :perrons6,
:perrons7,:perrons8,
:perrons9, :perrons10,
:perrons11, :perrons12,
:perrons13, :perrons14
)
AND calendar.vscdate = DATE(DATE_ADD(now(), INTERVAL "07:00" HOUR_MINUTE))
AND segments.segmentstart >= TIME(DATE_ADD(now(), INTERVAL "07:00" HOUR_MINUTE))
AND routes.routeservicetype = 0
ORDER BY segments.segmentstart