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
最初に、翻訳からすべてを選択し、それ自体と結合して、対応する英語の値も取得します。
次に、結果を PropertyKey ごとに 1 つだけに制限します。これは group by に似ていますが、返されるレコードとして特定のレコードを選択する必要があります (group by では最初に見つかったレコードが返されるのではなく)。そのため、TranslationId を 1 つだけ返す内部クエリがあります。
Explain を実行すると、次の情報が得られます。
MySQL に遅い派生テーブルを使用させることなく、同じ結果セットを返す方法はありますか? ありがとう!
UPDATE : スキーマとサンプル データを使用して SQL Fiddle を作成しました。私のクエリを自分で実行して、結果を確認できます。うまくいけば、より速い方法で、同じ結果を得ることができる必要があります。http://sqlfiddle.com/#!2/44eb0/3/0