Como você otimiza uma consulta MySQL que se une a si mesma e faz um grupo “customizado”?
Eu tenho a seguinte consulta que está começando a ficar lenta conforme aumenta o tamanho da tabela do banco de dados:
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
Primeiro, estou selecionando tudo de Traduções, junto com ele para obter o valor de inglês correspondente também.
Então, quero limitar meus resultados a apenas um por PropertyKey. Isso é como um grupo, exceto que eu preciso escolher um registro específico para ser o retornado (em vez de o grupo apenas me fornecer o primeiro que encontrar). É por isso que tenho a consulta interna que apenas retorna um TranslationId.
Quando eu executo explico recebo as seguintes informações:
Existe uma maneira de retornar o mesmo conjunto de resultados sem precisar que o MySQL use uma tabela derivada mais lenta? Obrigado!
ATUALIZAR: Eu criei um SQL Fiddle com um esquema e dados de amostra. Você pode executar minha consulta para ver os resultados. Eu preciso ser capaz de obter os mesmos resultados, espero que de uma maneira mais rápida.http://sqlfiddle.com/#!2/44eb0/3/0