Bonjour

J'ai besoin de transformer cette requête générée :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
SELECT *
FROM avl_event
JOIN avl_vehicle ON (avl_event.VEHICLE_ID=avl_vehicle.ID)
WHERE avl_vehicle.COMPANY_ID=2
  AND (avl_event.CREATED_AT>='2010-01-05 05:00:00'
  AND avl_event.CREATED_AT<='2010-01-06 04:59:00')
  AND avl_event.EVENT_TYPE_ID IN (30,31)
  AND avl_event.VEHICLE_ID=avl_vehicle.ID
ORDER BY UPPER(avl_vehicle.NAME) ASC,avl_event.VEHICLE_ID ASC,avl_event.CREATED_AT ASC,avl_event.ID ASC
Comme ceci :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
SELECT *
FROM
(
  SELECT *
  FROM avl_event
  WHERE avl_event.CREATED_AT>='2009-12-29 05:00:00'
    AND avl_event.CREATED_AT<='2010-01-06 04:59:00'
) event
JOIN avl_vehicle
  ON  event.VEHICLE_ID=avl_vehicle.ID
WHERE avl_vehicle.COMPANY_ID=2
  AND event.EVENT_TYPE_ID IN (30,31)
ORDER BY UPPER(avl_vehicle.NAME) ASC,event.VEHICLE_ID ASC,event.CREATED_AT ASC,event.ID ASC
J'ai trouvé de la documentation ici :
http://snippets.symfony-project.org/snippet/75

Mais il semble que ca ne marche que sur les clause where, et non sur les jointures. Est ce que vous savez comment je pourrais faire ?

La première requête prend 12 sec, la seconde 0.5 (elle utilise le bon index...)

Merci

Pierre