0
У меня есть следующий запрос:альтернативный SQL-запрос/оптимизации для 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
Это своего рода медленный, и я думаю, что это потому, что moves
таблица запрашивается для каждой строки в таблице pokemon_moves вместо только которые соответствуют предписанию WHERE. Какой вариант лучше написать этот запрос?
Пожалуйста, обратите внимание, что числа в этом (внешней) таблицы хранятся в виде текста
Текст для целочисленного каста на предложение заказа выглядит как красный флаг. Вы также можете дважды проверить, чтобы убедиться, что у вас есть индекс на обоих столбцах move.id и pokemon_moves.move_id. – tidwall
Хороший совет, @jojaba. Я думаю, что сочетание вашего предложения и изменений «JOIN» значительно улучшит производительность запроса. – 2010-09-06 22:14:16