Wie optimiert man eine MySQL-Abfrage, die sich selbst verbindet und eine "benutzerdefinierte" Gruppe durchführt?

Ich habe die folgende Abfrage, die langsam zu werden beginnt, wenn die Größe der DB-Tabelle zunimmt:

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

Zunächst wähle ich alles aus Übersetzungen aus, um mir den entsprechenden englischen Wert auch zu verschaffen.

Dann möchte ich meine Ergebnisse auf nur einen pro PropertyKey beschränken. Dies ist wie eine Gruppe von, außer dass ich einen bestimmten Datensatz auswählen muss, um den zurückzugebenden Datensatz zu erhalten (anstelle der Art und Weise, wie group by mir nur den ersten ausgibt, den es findet). Aus diesem Grund habe ich die innere Abfrage, die nur eine TranslationId zurückgibt.

Beim Ausführen von EXPLAIN erhalte ich die folgenden Informationen:

Gibt es eine Möglichkeit, die gleichen Ergebnisse zurückzugeben, ohne dass MySQL eine langsamere abgeleitete Tabelle verwenden muss? Vielen Dank!

AKTUALISIEREN: Ich habe eine SQL-Geige mit einem Schema und Beispieldaten erstellt. Sie können meine Abfrage selbst ausführen, um die Ergebnisse anzuzeigen. Ich muss in der Lage sein, die gleichen Ergebnisse zu erzielen, hoffentlich schneller.http://sqlfiddle.com/#!2/44eb0/3/0

Antworten auf die Frage(1)

Ihre Antwort auf die Frage