Mysql
 sql >> Base de données >  >> RDS >> Mysql

Quand utiliser STRAIGHT_JOIN avec MySQL

Je ne recommanderais pas d'utiliser STRAIGHT_JOIN sans une bonne raison. Ma propre expérience est que l'optimiseur de requête MySQL choisit un plan de requête médiocre plus souvent que je ne le souhaiterais, mais pas assez souvent pour que vous deviez simplement le contourner en général, ce que vous feriez si vous utilisiez toujours STRAIGHT_JOIN.

Ma recommandation est de laisser toutes les requêtes en tant que JOINs réguliers. Si vous découvrez qu'une requête utilise un plan de requête sous-optimal, je suggérerais d'essayer d'abord de réécrire ou de restructurer un peu la requête pour voir si l'optimiseur choisira ensuite un meilleur plan de requête. De plus, pour innodb au moins, assurez-vous que ce n'est pas seulement que vos statistiques d'index sont obsolètes (ANALYSE TABLE ). Cela peut amener l'optimiseur à choisir un plan de requête médiocre. Les conseils de l'optimiseur doivent généralement être votre dernier recours.

Une autre raison de ne pas utiliser d'indicateurs de requête est que la distribution de vos données peut changer au fil du temps, ou que la sélectivité de votre index peut changer, etc. à mesure que votre table grandit. Vos conseils de requête qui sont optimaux maintenant peuvent devenir sous-optimaux avec le temps. Mais l'optimiseur ne pourra pas adapter le plan de requête à cause de vos conseils désormais obsolètes. Vous restez plus flexible si vous laissez l'optimiseur prendre les décisions.