|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Invité de passage
![]() Inscription : janvier 2007 Messages : 20 ![]() |
Bonjour,
Je suis en train de faire la chasse aux "using Temporary" pour améliorer les temps de réponses de mes requêtes. Je suis souvent obligé d'utiliser DICTINCT dans mes SELECT pour ne pas avoir de doublons dans mes résultats. Je constate que MySql utilise systématiquement une table temporaire pour traiter le DISTINCT. Y a t-il un moyen pour que Mysql n'utilise pas de table temporaire ? ou Y a t-il un autre moyen d'enlever les doublons (mis à part Group By) ? Exemple : table T1 avec clé unique sur IDPROD table T2 avec un INDEX sur IDPROD mais il peut y avoir plusieurs fois le même IDPROD dans la table T2 je fais ce genre de requête : Code :
|
||
|
|
00
|
|
|
#2 |
|
Expert Confirmé
![]() Inscription : mai 2002 Messages : 1 643 ![]() |
Je me poserai avant tout le question : Pourquoi ai-je des doublons ?
Ensuite vu le cas cité, est-ce que le distinct est vraiment util dans cette requête ? Et pour répondre à la question, pour virer les doublons il faut utiliser un distinct. Le group by sert à agréger des résultats. |
|
|
00
|
|
|
#3 | |
![]() ![]() ![]() Frédéric BROUARDExpert SGBDR & SQL Inscription : mai 2002 Messages : 10 959 ![]() |
Non, vous ne pouvez pas forcer les plans de requêtes à ce point et comme MySQL est doté d'une des plus mauvais optimiseur de tous les SGBDR....[quote]
Citation:
Commencez par apprendre le SQL. Mon site web, comme monbouquin peuvent vous y aider ! A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/ Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp. Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation * * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * * |
|
|
00
|
|
|
#4 | |||||
![]() ![]() |
Citation:
Au lieu d'un truc aussi abstrait, prenons un exemple plus concret. Règle de gestion : Un projet est dirigé par une seule personne et une personne peut diriger plusieurs projets. MCD :prj_id personne -0,n----diriger----1,1- projet Tables : personne (prs_id, prs_nom, prs_prenom...) projet (prj_id, prj_id_chef, prj_nom...) Quels sont les personnes qui dirigent les projets et quels sont leurs projets ? Code :
Il est donc normal que votre requête retourne plusieurs fois les mêmes données pour au moins l'une des deux colonnes du SELECT puisqu'elles ne proviennent pas de la même table. Alors commencez par vous demander quel est votre besoin concret.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau) À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française ! Linuxiens, comptez-vous ! |
|||||
|
00
|
Copyright © 2000-2012 - www.developpez.com