Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Оптимизация запроса Count() group by 
:(
    Опции темы
sanich_
Дата 20.11.2014, 22:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 145
Регистрация: 2.3.2008

Репутация: нет
Всего: нет



Добрый день.
Прошу помощи:

Есть запрос:

Код

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 с очень долго

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

Код

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()

Как можно еще оптимизировать?
PM MAIL   Вверх
Akina
Дата 21.11.2014, 08:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20570
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 106
Всего: 453



Где DDL? Где Explain цитатой с консоли?

Цитата(sanich_ @  20.11.2014,  23:34 Найти цитируемый пост)
Как можно еще оптимизировать? 

Создать необходимые для работы индексы. Вероятно, как минимум CREATE INDEX ON object (id_rubrika, id).


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
rodnover
Дата 24.11.2014, 05:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 223
Регистрация: 7.4.2009

Репутация: нет
Всего: 10



Код

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_


Во-первых, используйте group by НОРМАЛЬНО, то есть, в group by должны быть все поля, которые не задействованы в агрегатных функциях. Mysql единственная база данных, которую я встречал, которая позволяет так "вольготно" и неправильно группировать. Во-вторых проставить индексы, где необходимо.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MySQL | Следующая тема »


 




[ Время генерации скрипта: 0.1049 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.