Производительность MYSQL для подсчета подзапросов другой таблицы - PullRequest
0 голосов
/ 12 июня 2018

Привет! Я смотрю на очень старый код на сайте CakePHP 2.x.

Существует две таблицы order и order_products.Таблица заказов содержит 2500+ записей, а таблица order_products содержит более 38000 записей.

Следующий запрос занимает около 16 секунд:

SELECT `Order`.`id` as id, 
(SELECT SUM(sub_total) AS total FROM order_products WHERE (order_id = `Order`.`id`) GROUP by order_id) AS `Order__order_total` 
FROM `orders` AS `Order`;

Я понимаю, что этот запрос следует изменить, чтобы он содержал таблицу итогов по заказу, однако мой вопрос заключается в том, что это производительностьнормально на таких маленьких наборах записей?

1 Ответ

0 голосов
/ 12 июня 2018

Я бы порекомендовал записать это как:

SELECT o.id, 
       (SELECT SUM(op.sub_total) AS total
        FROM order_products op
        WHERE op.order_id = o.id
       ) G AS `Order__order_total` 
FROM `orders` o;

Тогда вам нужен индекс для order_products(order_id, sub_total).Производительность должна значительно улучшиться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...