powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Оптимизация запроса Count() group by
2 сообщений из 2, страница 1 из 1
Оптимизация запроса Count() group by
    #38812535
sanich
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день.
Прошу помощи:

Есть запрос:

Код: sql
1.
2.
3.
4.
SELECT c.id_categ, c.categ, count(o.id) AS count_
  FROM categ c, rubrika r, object o where c.id_categ=r.id_categ and r.id_rubrika=o.id_rubrika
GROUP BY c.id_categ
order by c.order_


explain: http://SSMaker.ru/f4b97347/

Время выполнения: 1,716 с очень долго

Я его переписал в:

Код: sql
1.
select id_categ, categ, (select count(o.id) from object o,rubrika r where o.id_rubrika=r.id_rubrika and r.id_categ=c.id_categ) count_ from categ c order by c.order_


explain: http://SSMaker.ru/6641f194/

Время выполнения: 0,515 уже лучше, но всеравно долго

Дольше всего выполняется подсчет Count()

Как можно еще оптимизировать?
...
Рейтинг: 0 / 0
Оптимизация запроса Count() group by
    #38812860
alex564657498765453
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИТАК, ответ ТС и паралельно вопрос Миксофту Акине Тангеру и компании

почему так??

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
select 
	u.iduser,u.login,count(f.idfile)
from 
	users u , folders d, files f
where 
	f.fk_idfolder = d.idfolder and 
	d.fk_iduser = u.iduser
group by 
	u.iduser,u.login
order by 
	u.login;


select 
	u.iduser,u.login,count(f.idfile)
from 
	users u  
		join folders d on (d.fk_iduser = u.iduser)
		join files f on (f.fk_idfolder = d.idfolder)
group by
	u.iduser,u.login
order by 
	u.login;


3.2 секунды каждый - время выполнения. (получаеться гдето 300 юзеров, на всех 2.5 ляма файлов, раскиданы гдето по 50к папок

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
select 
	u.iduser,u.login,
	(
		select 
			count(f.idfile)
		from 
			folders d, files f
		where 
			f.fk_idfolder = d.idfolder and 
			d.fk_iduser = u.iduser
	) count_
from 
	users u 
group by 
	u.iduser,u.login
order by 
	u.login



выполнение 2с

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
select 
	u.iduser,u.login,
	(
		select 
			sum(
			(
				select 
					count(*) 
				from 
					files f 
				where 
					f.fk_idfolder = d.idfolder
			))
		from 
			folders d
		where 
			d.fk_iduser = u.iduser
	) as count_
from
	users u
order by
	u.login


ещо быстрее - если верить профайлеру...там ваще время меньше секунды, но дольше если верить самому клиенту.
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Оптимизация запроса Count() group by
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]