Как автоматически подсчитывать кол-во строк в таблице?
Допустим у меня есть таблица:
CREATE table products(id int primary key auto_increment, title varchar(64), sold tinyint default 0, owner_id int);
Сейчас несколько моих запросов, которые считают кол-во строк для каждого пользователя выглядят так:
--Общее кол-во товаров
SELECT owner_id, count(*) FROM products GROUP BY owner_id;
--Кол-во проданных товаров
SELECT owner_id, count(*) FROM products WHERE sold=1 GROUP BY owner_id;
--Кол-во товаров на продаже
SELECT owner_id, count(*) FROM products WHERE sold=0 GROUP BY owner_id;
*Все необходимые индексы есть
Но, появилась проблема - у некоторых пользователей есть больше 100 тысяч записей, и этот запрос может занимать 1-2 секунды (что непозволительно долго). Появилась идея создать отдельную таблицу, которая будет хранить в себе ID пользователя и кол-во товаров:
CREATE table products_count(owner_id int, count_sum int, extra_data varchar(8));
Но проблема в том, что в коде довольно много запросов, которые удаляют/меняют/добавляют записи в products и было бы довольно трудно изменить их все, чтобы автоматически считалось кол-во записей.
Возможно ли как-то, используя стандартные средства MySQL, при каждом измении/удалении/пополнении таблицы products, пересчитывать товары для отдельного пользователя (используя различные условия, вроде sold=0, sold=1 и другие) и сохранять в products_count? Или только менять запросы, добавляя пересчёт и сохранение кол-ва?
Ответы (1 шт):
Встроенного в MySQL решения я не нашёл, так что решил делать всё средстами програмнного кода.
Рядом с каждым запросом, который меняет products (изменяет статус строки, удаляет строку, добавляет строку) добавил пересчёт общего кол-ва и сохранение в отдельную таблицу products_count.
Время исполнения запроса сократилось с 1.5-2 секунд до 0.1с