随着数据库表大小的增加,我有以下查询开始变慢:
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
首先,我从 Translations 中选择所有内容,并与它自身相结合以获得相应的英文值。
然后,我想将结果限制为每个 PropertyKey 一个。这就像一个 group by,除了我需要选择一个特定的记录作为返回的记录(而不是 group by 只给我它找到的第一个记录)。这就是为什么我有只返回一个 TranslationId 的内部查询。
当我运行解释时,我得到以下信息:
有没有一种方法可以返回相同的结果集而不必让 MySQL 使用较慢的派生表?谢谢!
更新:我创建了一个带有模式和示例数据的 SQL Fiddle。您可以自己运行我的查询以查看它给出的结果。我需要能够以更快的方式获得相同的结果。http://sqlfiddle.com/#!2/44eb0/3/0