¿Cómo optimiza una consulta MySQL que se une a sí misma y forma un grupo "personalizado"?
Tengo la siguiente consulta que comienza a ser lenta a medida que aumenta el tamaño de la tabla de base de datos:
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
Primero, selecciono todo de Traducciones, unido a sí mismo para obtener también el valor en inglés correspondiente.
Luego, quiero limitar mis resultados a solo uno por PropertyKey. Esto es como un grupo, excepto que necesito elegir un registro específico para que sea el que se devuelve (en lugar de la forma en que el grupo simplemente me da el primero que encuentra). Es por eso que tengo la consulta interna que solo devuelve un TranslationId.
Cuando corro explico me sale la siguiente información:
¿Hay alguna manera de que pueda devolver el mismo conjunto de resultados sin tener que hacer que MySQL use una tabla derivada más lenta? ¡Gracias!
ACTUALIZAR: He creado un Fiddle de SQL con un esquema y datos de muestra. Puedes ejecutar mi consulta por ti mismo para ver los resultados que da. Necesito poder obtener los mismos resultados, con suerte de una manera más rápida.http://sqlfiddle.com/#!2/44eb0/3/0