Jak zoptymalizować zapytanie MySQL, które łączy się w sobie i wykonuje grupę „niestandardową”?
Mam następujące zapytanie, które zaczyna się spowalniać wraz ze wzrostem rozmiaru tabeli DB:
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
Najpierw wybieram wszystko z Tłumaczenia, łączę się z sobą, aby uzyskać również odpowiednią wartość angielską.
Następnie chcę ograniczyć moje wyniki do tylko jednego na klucz PropertyKey. To jest jak grupa, z wyjątkiem tego, że muszę wybrać konkretny rekord, który ma zostać zwrócony (zamiast sposobu, w jaki grupa obok daje mi pierwszy znaleziony). Dlatego mam wewnętrzne zapytanie, które po prostu zwraca jeden TranslationId.
Po uruchomieniu wyjaśnienia otrzymuję następujące informacje:
Czy istnieje sposób na zwrócenie tego samego zestawu wyników bez konieczności używania wolniejszej tabeli MySQL? Dzięki!
AKTUALIZACJA: Utworzyłem narzędzie SQL Fiddle ze schematem i przykładowymi danymi. Możesz uruchomić moje zapytanie, aby zobaczyć wyniki, które daje. Muszę być w stanie uzyskać te same wyniki, miejmy nadzieję, w szybszy sposób.http://sqlfiddle.com/#!2/44eb0/3/0