2012-04-08 3 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 local_localization localization ON (localization.city_id = city.id и localization.lang = 'en') '. –

ответ

1

Вам нужно будет создать индекс для localization.city_id и еще один для localization.name (у вас есть тот, который также включает localization.lang).

Если вы извлекаете много строк, вы можете удалить city.country_id и localization.lang из своего выбора, ведь у вас уже есть эти значения.

Смежные вопросы