par
Genova » 21 déc. 2008, 16:50
Bonjour à tous,
je bloque sur l'optimisation d'une requête, qui met beaucoup trop de temps à mon gout alors que je suis sur qu'avec les bons index elle pourrait être très rapide.
Voilà le principe : il s'agit d'un script open source de forums, et j'ai besoin de récupérer
le sujet le plus fréquenté pour un membre donné.
Voici ma requête :
Code : Tout sélectionner
SELECT t_id, COUNT(*) AS total
FROM posts
WHERE u_id = $id_du_membre
AND f_id IN ($liste_des_forums_que_le_membre_peut_lire)
GROUP BY t_id
ORDER BY total DESC
LIMIT 1
Voici les champs principaux de ma table :
Code : Tout sélectionner
CREATE TABLE `fsb2_posts` (
`p_id` int(11) NOT NULL auto_increment,
`f_id` mediumint(9) NOT NULL default '0',
`t_id` int(11) NOT NULL default '0',
`u_id` int(11) NOT NULL default '0'
)
Initialement, j'étais partie sur l'idée d'un index que j'appel
topic_per_user et qui a comme champs, dans l'ordre
u_id et
t_id. Cet index fonctionne parfaitement tant que je n'ajoute pas la restriction sur le champ
f_id. Cependant dès que je l'ajoute, la requête redevient lente et l'index n'est plus optimisé. Comment puis je intégrer cette restriction sur le champ
f_id à mon index ? Que me conseillez vous de faire pour optimiser tout ça ?
Je vous remercie !
Bonjour à tous,
je bloque sur l'optimisation d'une requête, qui met beaucoup trop de temps à mon gout alors que je suis sur qu'avec les bons index elle pourrait être très rapide.
Voilà le principe : il s'agit d'un script open source de forums, et j'ai besoin de récupérer [i]le sujet le plus fréquenté pour un membre donné[/i].
Voici ma requête :
[code]SELECT t_id, COUNT(*) AS total
FROM posts
WHERE u_id = $id_du_membre
AND f_id IN ($liste_des_forums_que_le_membre_peut_lire)
GROUP BY t_id
ORDER BY total DESC
LIMIT 1[/code]
Voici les champs principaux de ma table :
[code]CREATE TABLE `fsb2_posts` (
`p_id` int(11) NOT NULL auto_increment,
`f_id` mediumint(9) NOT NULL default '0',
`t_id` int(11) NOT NULL default '0',
`u_id` int(11) NOT NULL default '0'
)[/code]
Initialement, j'étais partie sur l'idée d'un index que j'appel [b]topic_per_user[/b] et qui a comme champs, dans l'ordre [b]u_id[/b] et [b]t_id[/b]. Cet index fonctionne parfaitement tant que je n'ajoute pas la restriction sur le champ [b]f_id[/b]. Cependant dès que je l'ajoute, la requête redevient lente et l'index n'est plus optimisé. Comment puis je intégrer cette restriction sur le champ [b]f_id[/b] à mon index ? Que me conseillez vous de faire pour optimiser tout ça ?
Je vous remercie !