MySQL提高查询性能

MySQL提高查询性能,mysql,optimization,query-optimization,Mysql,Optimization,Query Optimization,我有这样一个疑问: SELECT city.id, city.country_id, localization.lang , localization.name, ... some other fields ... FROM city city LEFT OUTER JOIN city_localization localization ON ( localization.city_id = city.id ) WHERE city.country_id = '196' AND localiza

我有这样一个疑问:

SELECT city.id, city.country_id, localization.lang , localization.name, ... some other fields ...
FROM city city
LEFT OUTER JOIN city_localization localization ON ( localization.city_id = city.id )
WHERE city.country_id = '196' AND localization.lang = 'en'
ORDER BY localization.name
“城市”表架构:

“城市_本地化”表架构:

解释输出:


如何避免使用文件排序和临时索引?

您需要为
本地化.city\u id
创建一个索引,并为
本地化.name
创建另一个索引(您当前有一个索引还包括
本地化.lang


如果您正在检索大量行,您可能希望从select中删除
city.country\u id
localization.lang
,毕竟您已经有了这些值。

我不知道文件排序和临时,但我注意到您过滤了左连接的右侧,实际上将其替换为内部连接。您应该在连接本身中过滤
city\u本地化
左外连接city\u本地化打开(localization.city\u id=city.id和localization.lang='en')