J'ai la requête suivante:requête SQL alternative/optimisation pour LEFT OUTER JOIN
SELECT
`pokemon_moves`.`pokemon_move_method_id`,
`pokemon_moves`.`level`,
`move`.`id`,
`move`.`name`
FROM
`pokemon_moves`
LEFT OUTER JOIN
`moves` `move` ON
`move`.`id` = `pokemon_moves`.`move_id`
WHERE
`pokemon_moves`.`pokemon_move_method_id` < '4' AND
`pokemon_moves`.`pokemon_id` = '2' AND
`pokemon_moves`.`version_group_id` = '6'
ORDER BY
CAST(`pokemon_moves`.`level` as INTEGER) ASC,
`move`.`name` ASC
Il est un peu lent et je pense que c'est parce que la table moves
est interrogé pour chaque ligne de la table pokemon_moves au lieu de seulement ceux qui sont conformes à la clause WHERE. Quelle serait une meilleure option pour écrire cette requête?
S'il vous plaît noter que les entiers dans ce tableau (externe) sont stockés sous forme de texte
La conversion du texte en nombre entier sur une clause de commande ressemble à un drapeau rouge. Vous pouvez également vérifier que vous avez un index sur vos deux colonnes move.id et pokemon_moves.move_id. – tidwall
Bon conseil, @jojaba. Je pense que la combinaison de votre suggestion et des modifications 'JOIN 'améliorera considérablement les performances de la requête. –