2012-04-08 52 views
0

我有这样一个查询:MySQL的提高查询性能

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 

“城市” 表模式:

enter image description here

“city_localization” 表模式:

enter image description here

说明输出:

enter image description here

如何避免使用filesort和临时?

+0

我不知道关于filesort和临时的,但我注意到你过滤左连接的右侧,用内连接取代它。应该在连接本身中过滤'city_localization':'LEFT OUTER JOIN city_localization localization ON(localization.city_id = city.id and localization.lang ='en')'。 – 2012-04-08 20:13:05

回答

1

您需要为localization.city_id创建一个索引,并为localization.name创建一个索引(您目前有一个索引也包含localization.lang)。

如果您正在检索很多行,您可能想要从您的选择中删除city.country_idlocalization.lang,毕竟您已经拥有这些值。