У меня есть следующий запрос, который начинает становиться медленным, как размер таблицы увеличивается БД:Как вы оптимизируете запрос MySQL, который объединяется сам по себе и выполняет ли «настраиваемую» группу?
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. Это похоже на группу, за исключением того, что мне нужно выбрать конкретную запись, которая будет возвращена (вместо того, чтобы группа просто дала мне первую, которую она обнаружила). Вот почему у меня есть внутренний запрос, который просто возвращает один TranslationId.
Когда я бег объяснить я получаю следующую информацию:
Есть ли способ, что я могу возвращать тот же набор результатов без необходимости иметь MySQL использовать медленнее производную таблицу? Благодаря!
UPDATE: Я создал SQL скрипку со схемой и выборки данных. Вы можете запустить мой запрос для себя, чтобы увидеть результаты, которые он дает. Мне нужно быть , способным получить те же результаты, надеюсь, быстрее. http://sqlfiddle.com/#!2/44eb0/3/0
Можете ли вы предоставить образцы данных и результаты, которые вы хотите? –
MySQL должен жаловаться при выполнении запроса, поскольку PropertyKey в предложении ORDER BY неоднозначен (их три, даже если они равны). – newtover
@newtover - он не будет жаловаться, потому что на этом уровне есть только один PropertyKey (другие - в подзапросах). Если вы хотите придерживаться t. перед ним для ясности, это прекрасно. – 11101101b