Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Составление SQL-запросов > Элементарный запрос mysql выполняется ужасно долго


Автор: Ilfirin 26.7.2012, 22:28
Есть две таблицы:
клиенты - clients (id, name),
продажи - sales (id, client_id, price)

у каждого клиента может быть по несколько покупок, а может быть и ни одной.

Задача:

Вывести список клиентов и суммы их покупок.

Моё решение:
Делаю такой запрос:
Код

SELECT 
    clients.id, 
    clients.name,
  statics.total
FROM clients
LEFT JOIN
    (SELECT client_id, SUM( price ) as total FROM sales GROUP BY sales.client_id) AS statics 
ON statics.client_id = clients.id


Данный запрос при базе пользователей например (5к) и продаж (10к)
выполняется долго - 2-3 секунды.

В то время как отдельные его части как:
Код

SELECT client_id, SUM( price ) as total FROM sales GROUP BY sales.client_id


или весь запрос но без GROUP BY:

Код

SELECT 
    clients.id, 
    clients.name,
  statics.total
FROM clients
LEFT JOIN
    (SELECT client_id, 0 as total FROM sales) AS statics 
ON statics.client_id = clients.id


выполняется сотые доли секунды.

Вопрос:

Можно ли оптимизировать этот запрос чтобы он выполнялся быстро или нет?

Автор: Akina 28.7.2012, 23:10
Код

SELECT
  clients.id
, clients.name
, SUM(sales.price) total
FROM
  clients 
LEFT JOIN
  sales
ON
  sales.client_id = clients.id
GROUP BY
  clients.id
, clients.name;

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)