SQL: оптимизация подзапроса «НЕ В» или альтернативы

У меня есть две таблицы базы данных: «места» и «переводы». Переводы названий мест производятся путем выбора записей из «мест», которые еще не переведены на указанный язык:

SELECT `id`, `name`
FROM `places`
WHERE `id` NOT IN (SELECT `place_id` FROM `translations` WHERE `lang` = 'en')

Это нормально работало с 7 000 записей мест, но произошел сбой, когда число переводов достигло 5 000. С тех пор запрос занимает около 10 секунд и возвращает ошибку:

2006 г. - сервер MySQL пропал

Как я понимаю, основная проблема здесь - это возвращение подзапроса. ко многим результатам, но как я могу решить эту проблему, если мне нужно выбрать все места, которые еще не переведены?

Мой план Б состоит в том, чтобы создать новое логическое поле в таблице "мест", которое называется "переведено", и сбросьте его на «ложь», каждый раз, когда я меняю язык - это помешало бы иметь подзапрос. Однако, может быть, я мог бы просто изменить свой текущий оператор SQL и не допустить добавления дополнительного поля?

9
задан krn 5 September 2010 в 10:52
поделиться