Допустим, имеются две таблицы: покупатели (customer) и заказы (order).
CREATE TABLE `customer` (
id INT,
name VARCHAR(255)
);
CREATE TABLE `order` (
id INT,
customer_id INT
);
Необходимо запросить список покупателей, который бы содержал количество заказов каждого покупателя. Способ, который я знаю — это использовать вложенный подзапрос.
SELECT customer.name,
(SELECT COUNT(*)
FROM `order`
WHERE `order`.customer_id = customer.id) AS order_count
FROM customer;
Этот запрос решает поставленную задачу, но у меня возникают дополнительные вопросы:
- Какие подводные камни у этого запроса?
- Насколько эффективен этот способ, если у нас миллионы записей в обоих таблицах.
- Какие варианты оптимизации существуют, кроме как добавить поле order_count в таблицу order и актуализировать ее при измененияз с заказами покупателя.
- Если мы выводим по 100 покупателей на страницу, насколько разумно сделать 100 отдельных запросов на получение количества заказов для каждого покупателя на странице.
- Могут ли чем-то помочь индексы и как именно?
P. S. Интересует реализация на MySQL, но если на PostgreSQL это решается как-то лучше, то мне бы тоже было бы интересно посмотреть.