JOIN или multiple select в Mysql

199
02 августа 2017, 20:14

Всем привет. Вопрос к знатокам БД касательно производительности. Постараюсь изъясниться понятным языком.

Есть три таблицы: таблица с пользователями, таблица с заказами и таблица с элементами в корзине, каждая из которых относится к какому-то заказу. Соответственно, заказ связан с юзером по UserId, а элемент корзины связан с заказом через OrderId.

У заказа есть несколько предопределённых статусов. Т.е. у пользователя есть много заказов, но в один момент времени он работает только с одним заказом. Для этого есть ещё у юзера такое поле, как CurrentOrderId, чтобы быстро отследить текущий заказ вместо постоянной выборки, типа SELECT Id FROM orders WHERE UserID = target AND Status = 'New'.

Задача стоит в следующем: необходимо достать информацию о заказе имея только UserId. Я вижу два способа это сделать:

  1. Сделать выборку с использованием INNER JOIN.

    SELECT o.Id, o.CompanyId, o.TotalPrice, o.Status, COUNT(*) as ItemCount
    FROM orders as o
    INNER JOIN users as u ON o.Id = u.CurrentOrderId
    INNER JOIN cartitems as i ON o.Id = i.OrderID
    WHERE u.Id = ?

  2. Сначала достать запись юзера:

    SELECT CurrentOrderId FROM users WHERE Id = ?

А затем имея на руках CurrentOrderId просто достать нужную мне инфу про заказ без лишнего объединения с таблицей users:

SELECT o.Id, o.CompanyId, o.TotalPrice, o.Status, COUNT(*) as ItemCount
FROM orders as o
INNER JOIN cartitems as i ON o.Id = i.OrderID 
WHERE o.Id = ?

Вопрос заключается в следующем. Какой из вариантов будет быстрее работать при больших размерах таблиц. Просто закралась мысль, что лишнее объединение при больших объёмах данных будет работать дольше, чем два запроса.

Надеюсь на помощь. Заранее спасибо.

READ ALSO
Как вызвать класс в Java? [требует правки]

Как вызвать класс в Java? [требует правки]

Всем привет!Мне нужно сделать чтоб при выполнении определённого условия,загружался("включался" определённый java файл(класс))Как можно реализовать...

252
Можно ли изменить направление recyclerview?

Можно ли изменить направление recyclerview?

Стандартное направление recyclerview это сверху-внизТ

220