Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Requête lente

5 réponses
Avatar
benmouhoub5
Bjr =E0 tous.

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 ?

Merci

5 réponses

Avatar
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
Avatar
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
Avatar
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
Avatar
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
Avatar
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 ***********************