URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID8
Нить номер: 5373
[ Назад ]

Исходное сообщение
"Оптимизация запроса GROUP BY"

Отправлено Urms , 18-Ноя-07 01:36 
Знатоки SQL! Нужна помощь в оптимизации то ли запроса, то ли базы данных.

В двух словах, есть база данных некоторых товаров, у каждого товара есть производитель (id) и кол-во таких товаров в наличии. Необходимо выдать общее количество разных товаров каждого производителя. Это, конечно практически книжный пример использования GROUP BY, но задача усложняятся тем, что записей в таблице миллионы и работает стандартное решение слишком медленно. Может, кто-нибудь знает какой-то хитрый вариант решения данной проблемы?

Заранее всем спасибо!


Содержание

Сообщения в этом обсуждении
"Оптимизация запроса GROUP BY"
Отправлено Паша , 18-Ноя-07 10:17 
Кроме group by id с вытаскиванием sum(count) ничего вроде и не сделать. Насколько медленно? Какая БД? Если есть возможность можно снапшот (Materialized View) оcвежать по расписанию. Динамика то у таблицы наверное небольшая в пределах допустимых погрешностей.

"Оптимизация запроса GROUP BY"
Отправлено Urms , 18-Ноя-07 12:40 
>Кроме group by id с вытаскиванием sum(count) ничего вроде и не сделать.
>Насколько медленно? Какая БД? Если есть возможность можно снапшот (Materialized View)
>оcвежать по расписанию. Динамика то у таблицы наверное небольшая в пределах
>допустимых погрешностей.

Т.е. сделать какой-то кеш? Беда в том, что запрос с дополнительными условиями вроде категории товара и т.п. и от этого зависит кол-во. Все варианты не выйдет покешировать.

А работает это все достаточно медленно, чтобы быть слишком медленным для юзера. База данных -- MySQL


"Оптимизация запроса GROUP BY"
Отправлено tx2 , 18-Ноя-07 15:41 
какой движок табличный (иннодб?)..
и как организована таблица и индексы в ней?

возможно создание дополнительных(и м/б избыточных) индексов по нескольким полям улучшит ситуацию...


"Оптимизация запроса GROUP BY"
Отправлено Паша , 18-Ноя-07 17:16 
>Необходимо выдать общее
>количество разных товаров каждого производителя.

Это понимается достаточно конкретно, и может быть кэшировано. Если Вам нужно что-то ещё, описывайте подробнее.



"Оптимизация запроса GROUP BY"
Отправлено TimeKeeper , 04-Сен-08 16:44 
Сталкнулся с похожей проблемой

Добавлены строки: 21057 (запрос занял 108.9304 сек.)
SQL-запрос:
INSERT IGNORE INTO temp2
SELECT page_graph.id_page_to
FROM page_graph
RIGHT JOIN temp1 ON ( temp1.id = page_graph.id_page_from ) ;

---------------------------------------

А SELECT:

строки 0 - 29 (4,629,563 всего, запрос занял 0.0004 сек.)
SQL-запрос:
SELECT page_graph.id_page_to
FROM page_graph
RIGHT JOIN temp1 ON ( temp1.id = page_graph.id_page_from ) ;



"Оптимизация запроса GROUP BY"
Отправлено TimeKeeper , 04-Сен-08 16:45 
Сталкнулся с похожей проблемой

Добавлены строки: 21057 (запрос занял 108.9304 сек.)
SQL-запрос:
INSERT IGNORE INTO temp2
SELECT page_graph.id_page_to
FROM page_graph
RIGHT JOIN temp1 ON ( temp1.id = page_graph.id_page_from )

---------------------------------------

А SELECT:

строки 0 - 29 (4,629,563 всего, запрос занял 0.0004 сек.)
SQL-запрос:
SELECT page_graph.id_page_to
FROM page_graph
RIGHT JOIN temp1 ON ( temp1.id = page_graph.id_page_from )