Как посчитать количество строк по категориям?

Добрый день. Делаю "магазин", есть товары, рассортированы по категориям, типа:
Таблица товаров:
CREATE TABLE goods ( 
	id INT UNSIGNED NOT NULL AUTO_INCREMENT,
	_data JSON NOT NULL,
	_cat INT UNSIGNED NOT NULL,
	PRIMARY KEY (id)
) DEFAULT CHARSET=utf8;

Таким запросом я получаю все категории товаров и их количество (библиотека safemysql):
$cats = $db->getAll('
	SELECT _cat, COUNT(*) as _cnt
	FROM goods 
	GROUP BY _cat
');

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

Есть же второй вариант, который должен быть значительно лучше. Это создать таблицу категорий и столбцу _cat присваивать идентификатор категории из другой таблицы, а потом выводить примерно так:
$cats = $db->getAll('
	SELECT COUNT( g.id ) as _cnt, c.* 
	FROM cats c 
	LEFT JOIN goods g 
	ON g._cat = c.id
	GROUP BY g._cat
');

Пока что не тестировал второй запрос, написал на глаз. На счет GROUP BY не уверен, но вроде нужен.
Так вот, есть второй вариант, хранить все категории с нужными данными в таблице и потом при помощи запроса делать сразу подсчет.
Сейчас у меня тестовая таблица товаров, там около 1 млн. записей. Когда в таблице меняется как-то значение, то при первой загрузке сайта он может несколько секунд грузиться (потом, видимо, кешируется), и вот вопрос в том, на сколько может подняться производительность, если реализовать выборку по второму варианту? И есть ли еще более быстрый вариант?
  • Вопрос задан
  • 57 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
Zelo Москва
от 130 000 руб.
Amigoweb Магнитогорск
от 40 000 до 60 000 руб.
27 янв. 2020, в 08:07
5000 руб./за проект
27 янв. 2020, в 04:52
30000 руб./за проект