J'utilise une requ=EAte sql dans un programme php coupl=E9 =E0 une base de
donn=E9e Mysql.
Le probl=E8me est que, il y'a jusqu'a un moment la requ=EAte r=E9pondais
rapidement, mais maintenant elle est devenue terriblement lente; Je ne
sais pas pourquoi.
Voila la requ=EAte:
SELECT P.id_audio, P.note_audio, P.id_playlist, C.nom_audio,
C=2Eid_artiste, A.nom_artiste, AVG( Pl.note_audio ) AS Moyenne,
COUNT( Pl.note_audio ) AS total, Co.id_compte, Co.avatar_compte,
Cs.cover_support FROM playlist_u P, playlist_u Pl, catalogue_a C,
catalogue_s Cs, artes A, comptes Co, comptes U WHERE P.id_user =3D
U=2Eid_compte AND U.url =3D 'nasty' AND P.id_audio =3D C.id_audio AND
C=2Eid_artiste =3D A.id_artiste AND Pl.id_audio =3D P.id_audio AND Co.id =
=3D
A=2Eid_artiste AND C.id_support =3D Cs.id_support GROUP BY P.id_audio
ORDER BY P.note_audio DESC , Moyenne DESC LIMIT 0 , 5
Quelqu'un pour me faire une critique sur la requ=EAte et m'expliquer
pourquoi cette effondrement de performance ?
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Chris
a écrit :
Bjr à tous.
J'utilise une requête sql dans un programme php couplé à une base de donnée Mysql. Le problème est que, il y'a jusqu'a un moment la requête répondais rapidement, mais maintenant elle est devenue terriblement lente; Je ne sais pas pourquoi.
Voila la requête:
SELECT P.id_audio, P.note_audio, P.id_playlist, C.nom_audio, C.id_artiste, A.nom_artiste, AVG( Pl.note_audio ) AS Moyenne, COUNT( Pl.note_audio ) AS total, Co.id_compte, Co.avatar_compte, Cs.cover_support FROM playlist_u P, playlist_u Pl, catalogue_a C, catalogue_s Cs, artes A, comptes Co, comptes U WHERE P.id_user > U.id_compte AND U.url = 'nasty' AND P.id_audio = C.id_audio AND C.id_artiste = A.id_artiste AND Pl.id_audio = P.id_audio AND Co.id > A.id_artiste AND C.id_support = Cs.id_support GROUP BY P.id_audio ORDER BY P.note_audio DESC , Moyenne DESC LIMIT 0 , 5
Quelqu'un pour me faire une critique sur la requête et m'expliquer pourquoi cette effondrement de performance ?
Merci
Ya des index sur les tables ?
A+ chris
benmouhoub5@yahoo.fr a écrit :
Bjr à tous.
J'utilise une requête sql dans un programme php couplé à une base de
donnée Mysql.
Le problème est que, il y'a jusqu'a un moment la requête répondais
rapidement, mais maintenant elle est devenue terriblement lente; Je ne
sais pas pourquoi.
Voila la requête:
SELECT P.id_audio, P.note_audio, P.id_playlist, C.nom_audio,
C.id_artiste, A.nom_artiste, AVG( Pl.note_audio ) AS Moyenne,
COUNT( Pl.note_audio ) AS total, Co.id_compte, Co.avatar_compte,
Cs.cover_support FROM playlist_u P, playlist_u Pl, catalogue_a C,
catalogue_s Cs, artes A, comptes Co, comptes U WHERE P.id_user > U.id_compte AND U.url = 'nasty' AND P.id_audio = C.id_audio AND
C.id_artiste = A.id_artiste AND Pl.id_audio = P.id_audio AND Co.id > A.id_artiste AND C.id_support = Cs.id_support GROUP BY P.id_audio
ORDER BY P.note_audio DESC , Moyenne DESC LIMIT 0 , 5
Quelqu'un pour me faire une critique sur la requête et m'expliquer
pourquoi cette effondrement de performance ?
J'utilise une requête sql dans un programme php couplé à une base de donnée Mysql. Le problème est que, il y'a jusqu'a un moment la requête répondais rapidement, mais maintenant elle est devenue terriblement lente; Je ne sais pas pourquoi.
Voila la requête:
SELECT P.id_audio, P.note_audio, P.id_playlist, C.nom_audio, C.id_artiste, A.nom_artiste, AVG( Pl.note_audio ) AS Moyenne, COUNT( Pl.note_audio ) AS total, Co.id_compte, Co.avatar_compte, Cs.cover_support FROM playlist_u P, playlist_u Pl, catalogue_a C, catalogue_s Cs, artes A, comptes Co, comptes U WHERE P.id_user > U.id_compte AND U.url = 'nasty' AND P.id_audio = C.id_audio AND C.id_artiste = A.id_artiste AND Pl.id_audio = P.id_audio AND Co.id > A.id_artiste AND C.id_support = Cs.id_support GROUP BY P.id_audio ORDER BY P.note_audio DESC , Moyenne DESC LIMIT 0 , 5
Quelqu'un pour me faire une critique sur la requête et m'expliquer pourquoi cette effondrement de performance ?
Merci
Ya des index sur les tables ?
A+ chris
Eric
On 16 fév, 10:01, "" wrote:
Cs.cover_support FROM playlist_u P, playlist_u Pl, catalogue_a C, catalogue_s Cs, artes A, comptes Co, comptes U WHERE P.id_user = U.id_compte AND U.url = 'nasty' AND P.id_audio = C.id_audio AND
J'ai cru entendre un jour qu'il était plus rapide de faire des jointures que des "WHERE x.id = y.id".
A confirmer.
Eric
On 16 fév, 10:01, "benmouho...@yahoo.fr" <benmouho...@yahoo.fr> wrote:
Cs.cover_support FROM playlist_u P, playlist_u Pl, catalogue_a C,
catalogue_s Cs, artes A, comptes Co, comptes U WHERE P.id_user =
U.id_compte AND U.url = 'nasty' AND P.id_audio = C.id_audio AND
J'ai cru entendre un jour qu'il était plus rapide de faire des
jointures que des "WHERE x.id = y.id".
Cs.cover_support FROM playlist_u P, playlist_u Pl, catalogue_a C, catalogue_s Cs, artes A, comptes Co, comptes U WHERE P.id_user = U.id_compte AND U.url = 'nasty' AND P.id_audio = C.id_audio AND
J'ai cru entendre un jour qu'il était plus rapide de faire des jointures que des "WHERE x.id = y.id".
A confirmer.
Eric
benmouhoub5
On 16 fév, 14:05, Chris wrote:
a écrit :
> Bjr à tous.
> J'utilise une requête sql dans un programme php couplé à une base de > donnée Mysql. > Le problème est que, il y'a jusqu'a un moment la requête répondais > rapidement, mais maintenant elle est devenue terriblement lente; Je ne > sais pas pourquoi.
> Voila la requête:
> SELECT P.id_audio, P.note_audio, P.id_playlist, C.nom_audio, > C.id_artiste, A.nom_artiste, AVG( Pl.note_audio ) AS Moyenne, > COUNT( Pl.note_audio ) AS total, Co.id_compte, Co.avatar_compte, > Cs.cover_support FROM playlist_u P, playlist_u Pl, catalogue_a C, > catalogue_s Cs, artes A, comptes Co, comptes U WHERE P.id_user = > U.id_compte AND U.url = 'nasty' AND P.id_audio = C.id_audio AND > C.id_artiste = A.id_artiste AND Pl.id_audio = P.id_audio AND Co.id = > A.id_artiste AND C.id_support = Cs.id_support GROUP BY P.id_audio > ORDER BY P.note_audio DESC , Moyenne DESC LIMIT 0 , 5
> Quelqu'un pour me faire une critique sur la requête et m'expliquer > pourquoi cette effondrement de performance ?
> Merci
Ya des index sur les tables ?
A+ chris
Oui, si vous voulez je peux poster la structure des tables pour vous aider
On 16 fév, 14:05, Chris <c...@sra.fr> wrote:
benmouho...@yahoo.fr a écrit :
> Bjr à tous.
> J'utilise une requête sql dans un programme php couplé à une base de
> donnée Mysql.
> Le problème est que, il y'a jusqu'a un moment la requête répondais
> rapidement, mais maintenant elle est devenue terriblement lente; Je ne
> sais pas pourquoi.
> Voila la requête:
> SELECT P.id_audio, P.note_audio, P.id_playlist, C.nom_audio,
> C.id_artiste, A.nom_artiste, AVG( Pl.note_audio ) AS Moyenne,
> COUNT( Pl.note_audio ) AS total, Co.id_compte, Co.avatar_compte,
> Cs.cover_support FROM playlist_u P, playlist_u Pl, catalogue_a C,
> catalogue_s Cs, artes A, comptes Co, comptes U WHERE P.id_user =
> U.id_compte AND U.url = 'nasty' AND P.id_audio = C.id_audio AND
> C.id_artiste = A.id_artiste AND Pl.id_audio = P.id_audio AND Co.id =
> A.id_artiste AND C.id_support = Cs.id_support GROUP BY P.id_audio
> ORDER BY P.note_audio DESC , Moyenne DESC LIMIT 0 , 5
> Quelqu'un pour me faire une critique sur la requête et m'expliquer
> pourquoi cette effondrement de performance ?
> Merci
Ya des index sur les tables ?
A+
chris
Oui, si vous voulez je peux poster la structure des tables pour vous
aider
> J'utilise une requête sql dans un programme php couplé à une base de > donnée Mysql. > Le problème est que, il y'a jusqu'a un moment la requête répondais > rapidement, mais maintenant elle est devenue terriblement lente; Je ne > sais pas pourquoi.
> Voila la requête:
> SELECT P.id_audio, P.note_audio, P.id_playlist, C.nom_audio, > C.id_artiste, A.nom_artiste, AVG( Pl.note_audio ) AS Moyenne, > COUNT( Pl.note_audio ) AS total, Co.id_compte, Co.avatar_compte, > Cs.cover_support FROM playlist_u P, playlist_u Pl, catalogue_a C, > catalogue_s Cs, artes A, comptes Co, comptes U WHERE P.id_user = > U.id_compte AND U.url = 'nasty' AND P.id_audio = C.id_audio AND > C.id_artiste = A.id_artiste AND Pl.id_audio = P.id_audio AND Co.id = > A.id_artiste AND C.id_support = Cs.id_support GROUP BY P.id_audio > ORDER BY P.note_audio DESC , Moyenne DESC LIMIT 0 , 5
> Quelqu'un pour me faire une critique sur la requête et m'expliquer > pourquoi cette effondrement de performance ?
> Merci
Ya des index sur les tables ?
A+ chris
Oui, si vous voulez je peux poster la structure des tables pour vous aider
benmouhoub5
On 16 fév, 15:33, "Eric" wrote:
On 16 fév, 10:01, "" wrote:
> Cs.cover_support FROM playlist_u P, playlist_u Pl, catalogue_a C, > catalogue_s Cs, artes A, comptes Co, comptes U WHERE P.id_user = > U.id_compte AND U.url = 'nasty' AND P.id_audio = C.id_audio AND
J'ai cru entendre un jour qu'il était plus rapide de faire des jointures que des "WHERE x.id = y.id".
A confirmer.
Eric
je vais tester votre solution et vous confirmer ou vous infirmer cela
On 16 fév, 15:33, "Eric" <zef...@gmail.com> wrote:
On 16 fév, 10:01, "benmouho...@yahoo.fr" <benmouho...@yahoo.fr> wrote:
> Cs.cover_support FROM playlist_u P, playlist_u Pl, catalogue_a C,
> catalogue_s Cs, artes A, comptes Co, comptes U WHERE P.id_user =
> U.id_compte AND U.url = 'nasty' AND P.id_audio = C.id_audio AND
J'ai cru entendre un jour qu'il était plus rapide de faire des
jointures que des "WHERE x.id = y.id".
A confirmer.
Eric
je vais tester votre solution et vous confirmer ou vous infirmer cela
> Cs.cover_support FROM playlist_u P, playlist_u Pl, catalogue_a C, > catalogue_s Cs, artes A, comptes Co, comptes U WHERE P.id_user = > U.id_compte AND U.url = 'nasty' AND P.id_audio = C.id_audio AND
J'ai cru entendre un jour qu'il était plus rapide de faire des jointures que des "WHERE x.id = y.id".
A confirmer.
Eric
je vais tester votre solution et vous confirmer ou vous infirmer cela
Fred Brouard - SQLpro
SELECT P.id_audio, P.note_audio, P.id_playlist, C.nom_audio, C.id_artiste, A.nom_artiste, AVG( Pl.note_audio ) AS Moyenne, COUNT( Pl.note_audio ) AS total, Co.id_compte, Co.avatar_compte, Cs.cover_support FROM playlist_u P INNER JOIN playlist_u Pl ON P.id_audio = Pl.id_audio INNER JOIN catalogue_a C ON P.id_audio = C.id_audio INNER JOIN catalogue_s Cs ON C.id_support = Cs.id_support INNER JOIN artes A ON C.id_artiste = A.id_artiste INNER JOIN comptes Co ON A.id_artiste = Co.id INNER JOIN comptes U ON P.id_user = U.id_compte WHERE U.url = 'nasty' GROUP BY P.id_audio ORDER BY P.note_audio DESC , Moyenne DESC LIMIT 0 , 5
0) je ne voiT aucun intérêt à joindre une table sur elle même sur la même colonne ! FROM playlist_u P INNER JOIN playlist_u Pl ON Pl.id_audio = P.id_audio ??? Comme vous le constatez, faire ses jointures avec des JOIN et non pas noyées dans une clause WHERE permet de mettre en évidence des incohérences...
1) y a t-il un index sous toutes les clef primaires et étrangères ? a savoir : table colonnes -------------------- ----------------------------------- playlist_u id_audio, id_user catalogue_a id_audio, id_support, id_artiste catalogue_s id_support artes id_artiste comptes id, id_compte
2) y a t-il un index sur les conditions du filtre ? : comptes.url
3) y a t-il un index sur les colonnes triées ? : playlist_u.note_audio
a +
a écrit :
Bjr à tous.
J'utilise une requête sql dans un programme php couplé à une base de donnée Mysql. Le problème est que, il y'a jusqu'a un moment la requête répondais rapidement, mais maintenant elle est devenue terriblement lente; Je ne sais pas pourquoi.
Voila la requête:
SELECT P.id_audio, P.note_audio, P.id_playlist, C.nom_audio, C.id_artiste, A.nom_artiste, AVG( Pl.note_audio ) AS Moyenne, COUNT( Pl.note_audio ) AS total, Co.id_compte, Co.avatar_compte, Cs.cover_support FROM playlist_u P, playlist_u Pl, catalogue_a C, catalogue_s Cs, artes A, comptes Co, comptes U WHERE P.id_user > U.id_compte AND U.url = 'nasty' AND P.id_audio = C.id_audio AND C.id_artiste = A.id_artiste AND Pl.id_audio = P.id_audio AND Co.id > A.id_artiste AND C.id_support = Cs.id_support GROUP BY P.id_audio ORDER BY P.note_audio DESC , Moyenne DESC LIMIT 0 , 5
Quelqu'un pour me faire une critique sur la requête et m'expliquer pourquoi cette effondrement de performance ?
Merci
-- Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com Audit, conseil, expertise, formation, modélisation, tuning, optimisation ********************* http://www.datasapiens.com ***********************
SELECT P.id_audio, P.note_audio, P.id_playlist, C.nom_audio,
C.id_artiste, A.nom_artiste, AVG( Pl.note_audio ) AS Moyenne,
COUNT( Pl.note_audio ) AS total, Co.id_compte, Co.avatar_compte,
Cs.cover_support
FROM playlist_u P
INNER JOIN playlist_u Pl
ON P.id_audio = Pl.id_audio
INNER JOIN catalogue_a C
ON P.id_audio = C.id_audio
INNER JOIN catalogue_s Cs
ON C.id_support = Cs.id_support
INNER JOIN artes A
ON C.id_artiste = A.id_artiste
INNER JOIN comptes Co
ON A.id_artiste = Co.id
INNER JOIN comptes U
ON P.id_user = U.id_compte
WHERE U.url = 'nasty'
GROUP BY P.id_audio
ORDER BY P.note_audio DESC , Moyenne DESC
LIMIT 0 , 5
0) je ne voiT aucun intérêt à joindre une table sur elle même sur la
même colonne !
FROM playlist_u P
INNER JOIN playlist_u Pl
ON Pl.id_audio = P.id_audio
???
Comme vous le constatez, faire ses jointures avec des JOIN et non pas
noyées dans une clause WHERE permet de mettre en évidence des
incohérences...
1) y a t-il un index sous toutes les clef primaires et étrangères ?
a savoir :
table colonnes
-------------------- -----------------------------------
playlist_u id_audio, id_user
catalogue_a id_audio, id_support, id_artiste
catalogue_s id_support
artes id_artiste
comptes id, id_compte
2) y a t-il un index sur les conditions du filtre ? : comptes.url
3) y a t-il un index sur les colonnes triées ? : playlist_u.note_audio
a +
benmouhoub5@yahoo.fr a écrit :
Bjr à tous.
J'utilise une requête sql dans un programme php couplé à une base de
donnée Mysql.
Le problème est que, il y'a jusqu'a un moment la requête répondais
rapidement, mais maintenant elle est devenue terriblement lente; Je ne
sais pas pourquoi.
Voila la requête:
SELECT P.id_audio, P.note_audio, P.id_playlist, C.nom_audio,
C.id_artiste, A.nom_artiste, AVG( Pl.note_audio ) AS Moyenne,
COUNT( Pl.note_audio ) AS total, Co.id_compte, Co.avatar_compte,
Cs.cover_support FROM playlist_u P, playlist_u Pl, catalogue_a C,
catalogue_s Cs, artes A, comptes Co, comptes U WHERE P.id_user > U.id_compte AND U.url = 'nasty' AND P.id_audio = C.id_audio AND
C.id_artiste = A.id_artiste AND Pl.id_audio = P.id_audio AND Co.id > A.id_artiste AND C.id_support = Cs.id_support GROUP BY P.id_audio
ORDER BY P.note_audio DESC , Moyenne DESC LIMIT 0 , 5
Quelqu'un pour me faire une critique sur la requête et m'expliquer
pourquoi cette effondrement de performance ?
Merci
--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
********************* http://www.datasapiens.com ***********************
SELECT P.id_audio, P.note_audio, P.id_playlist, C.nom_audio, C.id_artiste, A.nom_artiste, AVG( Pl.note_audio ) AS Moyenne, COUNT( Pl.note_audio ) AS total, Co.id_compte, Co.avatar_compte, Cs.cover_support FROM playlist_u P INNER JOIN playlist_u Pl ON P.id_audio = Pl.id_audio INNER JOIN catalogue_a C ON P.id_audio = C.id_audio INNER JOIN catalogue_s Cs ON C.id_support = Cs.id_support INNER JOIN artes A ON C.id_artiste = A.id_artiste INNER JOIN comptes Co ON A.id_artiste = Co.id INNER JOIN comptes U ON P.id_user = U.id_compte WHERE U.url = 'nasty' GROUP BY P.id_audio ORDER BY P.note_audio DESC , Moyenne DESC LIMIT 0 , 5
0) je ne voiT aucun intérêt à joindre une table sur elle même sur la même colonne ! FROM playlist_u P INNER JOIN playlist_u Pl ON Pl.id_audio = P.id_audio ??? Comme vous le constatez, faire ses jointures avec des JOIN et non pas noyées dans une clause WHERE permet de mettre en évidence des incohérences...
1) y a t-il un index sous toutes les clef primaires et étrangères ? a savoir : table colonnes -------------------- ----------------------------------- playlist_u id_audio, id_user catalogue_a id_audio, id_support, id_artiste catalogue_s id_support artes id_artiste comptes id, id_compte
2) y a t-il un index sur les conditions du filtre ? : comptes.url
3) y a t-il un index sur les colonnes triées ? : playlist_u.note_audio
a +
a écrit :
Bjr à tous.
J'utilise une requête sql dans un programme php couplé à une base de donnée Mysql. Le problème est que, il y'a jusqu'a un moment la requête répondais rapidement, mais maintenant elle est devenue terriblement lente; Je ne sais pas pourquoi.
Voila la requête:
SELECT P.id_audio, P.note_audio, P.id_playlist, C.nom_audio, C.id_artiste, A.nom_artiste, AVG( Pl.note_audio ) AS Moyenne, COUNT( Pl.note_audio ) AS total, Co.id_compte, Co.avatar_compte, Cs.cover_support FROM playlist_u P, playlist_u Pl, catalogue_a C, catalogue_s Cs, artes A, comptes Co, comptes U WHERE P.id_user > U.id_compte AND U.url = 'nasty' AND P.id_audio = C.id_audio AND C.id_artiste = A.id_artiste AND Pl.id_audio = P.id_audio AND Co.id > A.id_artiste AND C.id_support = Cs.id_support GROUP BY P.id_audio ORDER BY P.note_audio DESC , Moyenne DESC LIMIT 0 , 5
Quelqu'un pour me faire une critique sur la requête et m'expliquer pourquoi cette effondrement de performance ?
Merci
-- Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com Audit, conseil, expertise, formation, modélisation, tuning, optimisation ********************* http://www.datasapiens.com ***********************