2012-04-08 15 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とtemporaryについてはわかりませんが、実際には内部結合で置き換えて、左側の結合の右側をフィルタリングすることに気付きました。結合自体で 'city_localization'をフィルタリングする必要があります:' LEFT OUTER JOIN city_localization localization ON(localization.city_id = city.idとlocalization.lang = 'en') '。 –

答えて

1

localization.city_idのインデックスとlocalization.nameのインデックスを作成する必要があります(現在はlocalization.langも含まれています)。

多くの行を取得する場合は、選択した値からすでにcity.country_idlocalization.langを削除することをお勧めします。

関連する問題