MySQL оптимизация запросов - PullRequest
       5

MySQL оптимизация запросов

0 голосов
/ 29 августа 2011

На что обращать внимание при попытке оптимизировать запрос mysql, объединяющий 7 таблиц?

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 = :perrons0
     OR stops.stopid = :perrons1  OR stops.stopid = :perrons2 
     OR stops.stopid = :perrons3  OR stops.stopid = :perrons4 
     OR stops.stopid = :perrons5  OR stops.stopid = :perrons6 
     OR stops.stopid = :perrons7  OR stops.stopid = :perrons8 
     OR stops.stopid = :perrons9  OR stops.stopid = :perrons10 
     OR stops.stopid = :perrons11 OR stops.stopid = :perrons12 
     OR stops.stopid = :perrons13 OR stops.stopid = :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 
  AND segments.segmentstart > "00:00:00" 
ORDER BY segments.segmentstart

Есть запрос, и я не могу придумать, что можно изменить, чтобы это оптимизировать... это тайм-ауты ....

любые советы приветствуются!

1 Ответ

1 голос
/ 29 августа 2011

Как насчет использования ключевого слова 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...