Accueil > Forum > > > > Optimisation d'une sous-requête SQL
Optimisation d'une sous-requête SQL
lundi 28 décembre 2009 à 03:17:24 |
Optimisation d'une sous-requête SQL

Lugdunum2
|
Bonjour,
Dans le cadre de l'optimisation des requêtes SQL d'un site web, je me retrouve avec une grande question dont je n'ai pas trouvé de réponse dans la documentation officielle de MySQL.
Ma question concerne donc la requête suivante:
Code : SELECT a.id,a.forum_name,a.forum_desc,a.forum_lock,
(SELECT COUNT(*) FROM forums_msg WHERE cat=a.id) AS nbr_msg,
(SELECT login FROM members WHERE id=auth LIMIT 1) AS login
(SELECT auth FROM forums_msg WHERE cat=a.id ORDER BY id DESC LIMIT 1) AS auth,
(SELECT reply FROM forums_msg WHERE cat=a.id ORDER BY id DESC LIMIT 1) AS reply,
(SELECT date FROM forums_msg WHERE cat=a.id ORDER BY id DESC LIMIT 1) AS last_date
FROM forums AS a WHERE a.forum_cat='1' ORDER BY a.forum_name ASC;
La requête retourne le résultat escompté, mais elle demande 0.65 seconde pour être exécutée, multiplié par 4 pour l'affichage complet du forum, on arrive donc à plus de 2 secondes, ce qui est impensable pour un site avec plusieurs centaines de connectés simultanément.
Il doit bien y avoir une solution pour optimiser les 3 sous-requêtes qui se ressemblent:
Code : (SELECT auth FROM forums_msg WHERE cat=a.id ORDER BY id DESC LIMIT 1) AS auth,
(SELECT reply FROM forums_msg WHERE cat=a.id ORDER BY id DESC LIMIT 1) AS reply,
(SELECT date FROM forums_msg WHERE cat=a.id ORDER BY id DESC LIMIT 1) AS last_date
Si vous avez une petite idée je vous en serais très reconnaissant ;-)
Merci d'avance et bonnes fêtes de fin d'année à tous :)
Vlaad
|
|
lundi 18 janvier 2010 à 19:48:44 |
Re : Optimisation d'une sous-requête SQL

nhervagault
|
salut,
Code :
SELECT a.id,a.forum_name,a.forum_desc,a.forum_lock,
login, COUNT(*) as nbr_msg, auth,reply, last_date
FROM forums AS a WHERE a.forum_cat='1' ORDER BY a.forum_name ASC
INNER JOIN forums_msg ON cat = a.id
INNER JOIN members ON id=auth
GROUP BY a.id,a.forum_name,a.forum_desc,a.forum_lock,
login,auth,reply, last_date
Peux-tu exprimer ta demande plus précisement le but de la requete ou niveau fonctionnel?
Nombre de message par categorie ???
Il est peut être plus simple de faire 2 requetes.
Les sous-requetes ne sont pas trop recommandées.
|
|
jeudi 21 janvier 2010 à 16:26:16 |
Re : Optimisation d'une sous-requête SQL

lenono75
|
+1 à la réponse de nhervagault !
Enlève le count(*) de ta requête, ça prend beaucoup ça ! Et fais ce count dans une requete distincte, ça aidera.
Pour les sous requete où tu sélectionnes un élément, pareil, externalises ces requêtes !
Bonne journée,
Arnaud
|
|
jeudi 21 janvier 2010 à 19:35:34 |
Re : Optimisation d'une sous-requête SQL

nhervagault
|
@lenono75
Je ne pense que l'* dans le count apporte plus de performance,
je penserais le contraire de cette maniere il y pas besoin de recherche une colonne dans les colonnes de la table ou des resultats.
L'optimiseur doit connaitre ce type de pratique
|
|
Cette discussion est classée dans : select, id, from, forums, where
Répondre à ce message
Sujets en rapport avec ce message
SELECT + float(5,2) [ par djagger ]
Salut !je fais la requete suivante :SELECT * FROM my_tarif WHERE min=15.49ca ne marche pas !!!!!?????par contre :SELECT * FROM my_tarif WHERE min</STR
Requêtes imbriquées. Erreur [ par patatedu65 ]
Bonjour,j'aimerai qu'on m'aide à toruver une solution au problème que je vous expose tout de suite.J'ai développé un site en PHP/MySQL. J'ai fait mes
Requete Imbriqué Erreur Aussi :s [ par SF2Boss ]
Voici La requete Rebelle : SELECT </s
Problème de select multiples dans plusieurs tables [ par superseb801 ]
bonjour, J'ai un problème, je voudrais faire une requête sur plusieurs tables en même temps (3 pour être plus précis), et avec d'autres SELECT dans le
Resultat incompréhensible [ par JALEO WAHRANI ]
Bonjour, j'ai une base avec 2 tables: 'perso et client', perso a pour colonnes:id, prop, etatétat vaut 'Y' si on effectue un suivi, sinon (par défaut)
Défit pour un pro [ par zazadec ]
Question de se compliquer la vie, je dois reprendre un site avec une bdd déjà existante... bref vous avez compris j'ai pas le choix.2 tables T1 et T2
Cette sous-requête peut retourner au plus un enregistrement [ par mariam1987 ]
Salut à tous, Je débute en SQL et j'ai créé la requête : <p c
optimisation de la clause WHERE sur des champs dates [ par ThierH ]
Bonjour j'ai une table SQL Server (2005) contenant plus de 50000 lignes. Dans chaque ligne, j'ai des données de type datetime, integer, ... Mon applic
Utilisation de clause where stockée en DB [ par Badside ]
Bonjour, J'aimerais récupérer la somme de plusieurs montants stockés dans une table et sélectionnés sur des critères repris dans une clause where sto
procedure de mise à jour [ par LiKayn ]
Salut, je suis debutant en sql et je viens de commencer les procedures stockées dernierement. je travaille sur un mini projet en asp en relation avec
Livres en rapport
|
Derniers Blogs
IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc REACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITERREACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITER par Groc
Une mauvaise utilisation de rx lors de l'écriture d'une couche d'accès à des services peut conduire à des cas embarassants avec des erreurs mal gérées, des appels qui ne partent lorsqu'ils le devraient, et même des résultats incorrects . le tout nuis...
Cliquez pour lire la suite de l'article par Groc SHAREPOINT BLOG SITE, PROBLèME D'ARCHIVESSHAREPOINT BLOG SITE, PROBLèME D'ARCHIVES par junarnoalg
Dernièrement, nous avons migré le site
myTIC
vers un nouveau serveur SharePoint 2010. Dans les contenus que nous vouloins récupérer, nous avions un certain nombre de blogs.
Nous avons utilisé les commandes Power...
Cliquez pour lire la suite de l'article par junarnoalg
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|