4Fermer6
ZephLe 15/06/2015 à 22:45
En l'occurrence le résultat est exactement le même avec InnoDB, je viens de tester sur l'exemple du post ./1.

Par contre il y a un début de piste dans le lien que tu as posté sur IRC : MySQL semble essayer d'inverser une jointure et se retrouve à faire quelque chose de très inefficace.

Solution n°1 : si je remplace le premier INNER JOIN (celui sur "section") par un LEFT JOIN, la requête ne scanne plus qu'une seule ligne et redevient instantanée. Plus qu'à comprendre d'où vient ce mauvais choix, et essayer de l'annuler sans utiliser de LEFT JOIN.

[edit]

Solution n°2, mais vraiment très MySQL-specific donc je n'aime pas trop non plus : forcer l'utilisation de l'index sur la table "topic" (i.e. "... FROM topic FORCE INDEX (PRIMARY) INNER JOIN ...")

Solution n°3 : supprimer l'index "section__last_time" sur la table "topic", c'est lui qui induit MySQL en erreur visiblement... sauf que j'en ai quand même besoin pour trier les sujets dans une même section.

Solution n°4 : au lieu de le supprimer, remplacer cet index en intercalant une colonne supplémentaire (dont je ne sers de toutes façons) ; ça corrige le problème sur le MySQL d'Infomaniak mais pas chez moi, donc c'est vraiment très fragile comme fix. J'imagine qu'il va réapparaître tout seul un de ces jours...