Я хочу оптимизировать запрос, используя объединение в качестве подзапроса. Я действительно не уверен, как построить запрос. Я использую MYSQL 5Union as sub query MySQL
Вот исходный запрос:
SELECT Parts.id
FROM Parts_Category, Parts
LEFT JOIN Image ON Parts.image_id = Image.id
WHERE
(
(
Parts_Category.category_id = '508' OR
Parts_Category.main_category_id ='508'
) AND
Parts.id = Parts_Category.Parts_id
) AND
Parts.status = 'A'
GROUP BY
Parts.id
То, что я хочу сделать, это заменить эту ((Parts_Category.category_id = '508' OR Parts_Category.main_category_id ='508')
часть нижеследующим союза. Таким образом, я могу отказаться от предложения GROUP BY и использовать индексы прямого col, которые должны повысить производительность. Таблицы категорий частей и частей содержат полмиллиона записей, поэтому любой выигрыш будет большим.
(
SELECT * FROM
(
(SELECT Parts_id FROM Parts_Category WHERE category_id = '508')
UNION
(SELECT Parts_id FROM Parts_Category WHERE main_category_id = '508')
)
as Parts_id
)
Может ли кто-нибудь дать мне понять, как его переписать? Я пробовал часами, но не могу получить его, поскольку я только новичок в MySQL.
Благодарности когда-либо так много Квасной. FY1 в категории категории 62 000, запрос возвращается примерно на 1 секунду быстрее! – gus
Я думаю, что в вашем втором примере мне нужно будет добавить GROUP BY Parts.id, поскольку я не хочу дубликатов, где часть может быть указана в других категориях. Это была идея использования Союза. В любом случае, я сравню производительность. Еще раз спасибо. – gus
GROUP BY понадобился во втором примере, и если добавить, я получаю ту же проблему - filesort и используя temp из Explain. – gus