Bonsoir,
Je dois faire une analyse du traffic du mois de janvier par tranche d'une heure sur les downloads d'un site.
chaque objet en telechargement a un iditifiant id mais certain objets en ont deux , le meme objet est donc telechargeable sous deux identifiants differents.

table objet:
objet id id2
AAA 1 60
BBB 2 NULL
CCC 3 NULL
DDD 4 NULL
EEE 5 61
FFF 6 NULL

mais ts les identifiants sont bien uniques.

La table data contient tous les telechargements qui ont eu lieu.
le champ 'timestamp' marque le debut du telechargement d'un objet et le champ 'url' est l'identifiant de l'objet.

Voila donc ma requete:
#1
SELECT DATE_FORMAT( d.timestamp, '%d %H' ) date, count( * ) y
FROM data d
INNER JOIN objet o ON d.url IN (o.id, o.id2)
WHERE d.timestamp
BETWEEN '2006-01-01 00:00:00' AND '2006-01-31 23:59:59'
GROUP BY DATE_FORMAT( d.timestamp, '%d %m %y %H' )
ORDER BY `date` ASC

Elle marche bien mais elle met bcp de temps à s'executer...
en fait autant de temps qu'une requete faisant un produit cartesien.

#2
SELECT DATE_FORMAT( d.timestamp, '%d %H' ) date, count( * ) y
FROM data d, objet o
WHERE d.url IN (o.id, o.id2)
AND d.timestamp
BETWEEN '2006-01-01 00:00:00' AND '2006-01-31 23:59:59'
GROUP BY DATE_FORMAT( d.timestamp, '%d %m %y %H' )
ORDER BY `date` ASC

le probleme semble venir de la double jointure sur le o.id et o.id2
Si je fais la meme chose que la requete #1 mais avec une simple jointure
INNER JOIN objet o ON d.url = o.id
ou bien INNER JOIN objet o ON d.url o.id2
la requete s'execute relativement rapidement...

si vous voyez des ameliorations possibles, je suis preneur.
Merci d'avance !