IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes MySQL Discussion :

[MariaDB 11.3.2] left join avec order by très lent (use filesort)


Sujet :

Requêtes MySQL

Mode arborescent

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2011
    Messages : 41
    Points : 13
    Points
    13
    Par défaut [MariaDB 11.3.2] left join avec order by très lent (use filesort)
    Bonsoir,

    J'avais demandé de l'aide sur ce site il y a déjà quelques années, avec de très bons retours et une bonne expérience. Je retente donc ma chance

    Imaginez une table herbs contenant environ 300.000 enregistrements et ne seconde table herb_translations, contenant environ 1.000.000 enregistrements :

    Nom : bdd_1.png
Affichages : 166
Taille : 89,1 Ko

    Désormais pour les requêtes...

    Sélectionner les 20 premières herbes, triées par le nom de manière alphabétique, contenant une traduction FR :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select herbs.id, sciname, name 
    from herbs
    join herb_translations on herbs.id = herb_translations.herb_id and locale = 'fr'
    order by herb_translations.name asc limit 20;
    Aucun problème, cela passe à 100% via les INDEX.

    Le problème : sélectionner les 20 premières herbes, triées par le nom de manière alphabétique, contenant une traduction FR, ET SI NON, renverra null pour le nom :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select herbs.id, sciname, name 
    from herbs
    left join herb_translations on herbs.id = herb_translations.herb_id and locale = 'fr'
    order by herb_translations.name asc limit 20;
    Ici cela ne fonctionne plus, c'est beaucoup beaucoup trop long, car il passe par filesort et non plus les index. Ce qui est normal sur papier mais pose problème, car je dois bien souvent afficher par ordre alphabétique dans une langue (et avoir la plante même s'il n'y a pas de traduction dans la langue demandée).

    Quelqu'un aurait une idée, une parade, quelque chose ?

    Merci d'avance pour vos avis éclairés,
    Belle fin de journée à tous.
    Images attachées Images attachées   

Discussions similaires

  1. Requête avec LEFT JOIN et ORDER BY très lente
    Par defacta dans le forum Requêtes
    Réponses: 2
    Dernier message: 01/10/2016, 01h26
  2. Faire un Left join avec pro*C
    Par xoum89 dans le forum SQL
    Réponses: 4
    Dernier message: 15/05/2009, 07h54
  3. left join avec max(date)
    Par supernicoco dans le forum Langage SQL
    Réponses: 2
    Dernier message: 02/10/2008, 08h53
  4. Left join avec 3 tables
    Par MathiasMathias dans le forum Langage SQL
    Réponses: 1
    Dernier message: 10/04/2007, 00h45
  5. LEFT JOIN avec Oracle 8i ne va pas... doit utiliser (+)
    Par loikiloik dans le forum Langage SQL
    Réponses: 10
    Dernier message: 21/04/2004, 16h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo