Как организовать быструю выборку из нескольких таблиц, если товар есть хотя бы в одной?
Есть таблицы:
items(id) - товары(в том числе товар, который никогда не покупался и не продавался)
out_items(id,item_id) - продажи
in_items(id,item_id) - покупки
Нужно одним запросом вывести список товара, который хотя бы один раз продавался или покупался.
Спасибо за отклик, с такого решения я и начал, но к сожалению оно очень медленное.
Сейчас как раз используется union. Запрос достаточно большой, убрал лишнее из запроса и примерно так:
SELECT *
FROM `items`
LEFT OUTER JOIN
(SELECT `item_id` FROM(
(SELECT `item_id` FROM `out_items` GROUP BY `item_id`)
UNION
(SELECT `item_id` FROM `in_items` GROUP BY `item_id`)
) `a`
GROUP BY `a`.`item_id`) `cc` ON(`items`.`id`=`cc`.`item_id`)
WHERE
`cc`.`item_id` IS NOT NULL
но все равно запрос отрабатывает за 0.5 -0.6 секунд. В основной таблице 200 тыс записей. В тех, где проверяется наличие совпадений 10-20 тыс. Может есть какие-то еще варианты оптимизировать запрос?
created4dev:
1) индексы какие есть?
2) в результирующей выборке - сколько элементов?
3) реальный размер кортежа данных в item какой? Там есть text/blob поля?