Как вы оптимизируете MySQL-запрос, который присоединяется к самому себе и создает «пользовательскую» группу?

У меня есть следующий запрос, который начинает замедляться по мере увеличения размера таблицы БД:

SELECT  
    t.*, 
    e.TranslatedValue AS EnglishValue
FROM (
    SELECT DISTINCT PropertyKey 
    FROM Translations
) grouper
JOIN Translations t 
    ON t.TranslationId = (
        SELECT TranslationId 
        FROM Translations gt
        WHERE gt.PropertyKey = grouper.PropertyKey 
            AND gt.Locale = 'es' 
            AND gt.Priority = 3
        ORDER BY gt.ModifiedDate DESC 
        LIMIT 1
    )
INNER JOIN Translations e 
    ON t.EnglishTranslationId = e.TranslationId 
ORDER BY t.ReviewerValidated, PropertyKey

Во-первых, я выбираю все из Переводов, объединившись с собой, чтобы получить также соответствующее значение английского языка.

Затем я хочу ограничить свои результаты только одним на PropertyKey. Это похоже на группу, за исключением того, что мне нужно выбрать конкретную запись, которая будет возвращена (вместо способа, которым группа просто дает мне первую найденную запись). Вот почему у меня есть внутренний запрос, который просто возвращает один TranslationId.

Когда я запускаю объяснение, я получаю следующую информацию:

Есть ли способ вернуть тот же набор результатов без необходимости использовать MySQL более медленную производную таблицу? Спасибо!

ОБНОВИТЬ: Я создал SQL Fiddle со схемой и примерами данных. Вы можете запустить мой запрос для себя, чтобы увидеть результаты, которые он дает. Я должен быть в состоянии получить те же результаты, надеюсь, быстрее.http://sqlfiddle.com/#!2/44eb0/3/0

Ответы на вопрос(1)

Ваш ответ на вопрос