Optimization 左外部联接的SQL查询替代/优化

Optimization 左外部联接的SQL查询替代/优化,optimization,sqlite,left-join,Optimization,Sqlite,Left 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 `pok

我有以下疑问:

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
选择
`pokemon_move`.`pokemon_move_method_id`,
`口袋妖怪移动`.`level`,
`移动`.`id`,
`移动`.`名称`
从…起
`口袋妖怪动作`
左外连接
`移动``移动`
`move`.`id`=`pokemon\u moves`.`move\u id`
哪里
`pokemon_moves`.`pokemon_move_method_id`<'4'和
`口袋妖怪移动'。'pokemon\u id`='2'和
`口袋妖怪移动`.`version\u group\u id`='6'
订购人
CAST(`pokemon_moves`.`level`为整数)ASC,
`移动`.`name`ASC
这有点慢,我认为这是因为对pokemonèmoves表中的每一行都查询
moves
表,而不是只查询符合WHERE子句的行。编写此查询的更好选项是什么


请注意,此(外部)表中的整数存储为文本

请尝试使用内部联接,并将WHERE条件放入JOIN语句中。例如:

SELECT
    `pokemon_moves`.`pokemon_move_method_id`,
    `pokemon_moves`.`level`,
    `move`.`id`,
    `move`.`name`
FROM
    `pokemon_moves`
INNER JOIN
    `moves` `move` ON
    `pokemon_moves`.`pokemon_id` = '2' AND
    `pokemon_moves`.`version_group_id` = '6' AND
    `pokemon_moves`.`pokemon_move_method_id` < '4' AND
    `move`.`id` = `pokemon_moves`.`move_id`
ORDER BY
    CAST(`pokemon_moves`.`level` as INTEGER) ASC,
    `move`.`name` ASC
选择
`pokemon_move`.`pokemon_move_method_id`,
`口袋妖怪移动`.`level`,
`移动`.`id`,
`移动`.`名称`
从…起
`口袋妖怪动作`
内连接
`移动``移动`
`口袋妖怪移动'。'pokemon\u id`='2'和
`口袋妖怪移动`.`version\u group\u id`='6'和
`pokemon_moves`.`pokemon_move_method_id`<'4'和
`move`.`id`=`pokemon\u moves`.`move\u id`
订购人
CAST(`pokemon_moves`.`level`为整数)ASC,
`移动`.`name`ASC

order子句上的文本到整数转换看起来像一面红旗。您可能还需要再次检查以确保move.id和pokemon_moves.move_id列都有索引。好建议,@jojaba。我认为,将您的建议与
JOIN
更改相结合,将极大地提高查询的性能。