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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Долго выполняется запрос 
:(
    Опции темы
NCIAC
Дата 29.4.2010, 13:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Здравствуйте. 
Подмогите. Запрос выполняется очень долго(10 сек.), при том, что записей не так много.

Код

SELECT 
  cat.id AS cat_id,
  cat.name,
  cat.description,
  cat.pict,
  COUNT(podcat_firms.firms_id) AS cnt_fb
FROM
  cat
  LEFT OUTER JOIN cat_podcat ON (cat_podcat.cat_id = cat.id)
  LEFT OUTER JOIN podcat_firms ON (podcat_firms.podcat_id = cat_podcat.podcat_id)
  LEFT OUTER JOIN firmbr ON (firmbr.id = podcat_firms.firms_id)
  LEFT OUTER JOIN city ON (city.id = firmbr.city_id)
  LEFT OUTER JOIN cat_glava ON (cat_glava.cat_id = cat.id)
  LEFT OUTER JOIN podcat_glava ON (podcat_glava.podcat_id = cat_podcat.podcat_id)
WHERE
  cat_glava.glava_id = '1' AND 
  city.id = '1' AND 
  podcat_glava.glava_id = '1' AND 
  firmbr.visible = '1' AND 
  firmbr.moder = '1' AND 
  firmbr.prenadl = 'f'
GROUP BY
  cat.id,
  cat.name,
  cat.description,
  cat.pict
ORDER BY
  cat.name



Код

CREATE TABLE `cat` (
  `id` int(255) NOT NULL auto_increment,
  `name` varchar(255) NOT NULL default '',
  `name_short` varchar(200) NOT NULL default '',
  `description` varchar(255) NOT NULL default '',
  `pict` varchar(255) NOT NULL default '',
  `prior` int(5) NOT NULL default '0',
  `views` int(255) NOT NULL default '0',
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=54 DEFAULT CHARSET=cp1251 AUTO_INCREMENT=54 ;

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

CREATE TABLE `cat_glava` (
  `id` int(25) NOT NULL auto_increment,
  `cat_id` int(25) NOT NULL default '0',
  `glava_id` int(25) NOT NULL default '0',
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=169 DEFAULT CHARSET=cp1251 AUTO_INCREMENT=169 ;

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

CREATE TABLE `cat_podcat` (
  `id` int(11) NOT NULL auto_increment,
  `cat_id` int(11) NOT NULL default '0',
  `podcat_id` int(11) NOT NULL default '0',
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=218 DEFAULT CHARSET=cp1251 AUTO_INCREMENT=218 ;

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

CREATE TABLE `city` (
  `id` int(10) NOT NULL auto_increment,
  `name` varchar(255) NOT NULL,
  `sort` int(3) NOT NULL,
  `visible` int(2) NOT NULL,
  `symbol_name` varchar(10) NOT NULL,
  `city_code` varchar(10) NOT NULL,
  `area` int(2) NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=7 DEFAULT CHARSET=cp1251 AUTO_INCREMENT=7 ;

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

CREATE TABLE `firmbr` (
  `id` int(25) NOT NULL auto_increment,
  `prenadl` varchar(2) default NULL,
  `private` varchar(100) NOT NULL,
  `city_id` int(5) NOT NULL default '1',
  `name` varchar(255) default NULL,
  `otch` varchar(255) NOT NULL,
  `fam` varchar(255) NOT NULL,
  `alt` varchar(100) default NULL,
  `description` text,
  `url` varchar(100) default NULL,
  `ind` text,
  `street_1` varchar(150) default NULL,
  `dom_1` varchar(150) default NULL,
  `tel_1` varchar(150) default NULL,
  `rr_1` varchar(100) default NULL,
  `email_1` varchar(100) default NULL,
  `min_zak` varchar(255) NOT NULL,
  `kol_ch` varchar(255) NOT NULL,
  `login` varchar(20) default NULL,
  `pass` varchar(20) default NULL,
  `contact` varchar(50) NOT NULL default '',
  `tel` varchar(50) NOT NULL default '',
  `email` varchar(100) default NULL,
  `str` varchar(4) default NULL,
  `stlb` varchar(4) default NULL,
  `map` varchar(30) default NULL,
  `ip_adr_add` varchar(20) default NULL,
  `auth_user_ins` varchar(100) NOT NULL default '',
  `date_add` datetime default NULL,
  `ip_adr_upd` varchar(20) NOT NULL default '',
  `date_upd` datetime NOT NULL default '0000-00-00 00:00:00',
  `auth_user_upd` varchar(100) NOT NULL default '',
  `search` text NOT NULL,
  `mailsend_1` int(2) NOT NULL default '0',
  `first_vizit` int(2) NOT NULL default '0',
  `message` text NOT NULL,
  `activation_code` varchar(255) NOT NULL,
  `moder` varchar(2) NOT NULL default '1',
  `visible` varchar(2) NOT NULL default '1',
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=6127 DEFAULT CHARSET=cp1251 AUTO_INCREMENT=6127 ;

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

CREATE TABLE `podcat_firms` (
  `id` int(255) NOT NULL auto_increment,
  `podcat_id` int(255) NOT NULL default '0',
  `firms_id` int(255) NOT NULL default '0',
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=26901 DEFAULT CHARSET=cp1251 AUTO_INCREMENT=26901 ;

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

CREATE TABLE `podcat_glava` (
  `id` int(255) NOT NULL auto_increment,
  `podcat_id` int(10) NOT NULL default '0',
  `glava_id` int(10) NOT NULL default '0',
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=366 DEFAULT CHARSET=cp1251 AUTO_INCREMENT=366 ;

PM MAIL   Вверх
Zloxa
Дата 29.4.2010, 14:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


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

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



Начинать надо с изучения плана запроса

Все ваши внешние соединения в секции where вырождаются во внутренние, потому определите для себя предикат отбора /*одно из условий в секции where*/ который позволяет отсеять наибольшее количество записей из исходного набора /*имеет самую низкую селективность*/ проиндексируйте поле, которое используется этим предикатом и постарайтесь добиться, чтобы выполнение запроса начиналось с отбора именно  по этому предикату


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
Akina
Дата 29.4.2010, 14:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Код

...
LEFT OUTER JOIN city ON (city.id = firmbr.city_id)
...
WHERE
...
  city.id = '1' 
...
Самому не странно?


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

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


Шустрый
*


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

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



Цитата(Zloxa @  29.4.2010,  21:51 Найти цитируемый пост)
Начинать надо с изучения плана запроса

я очень плохой специалист в mysql. Подскажите, как изучить план запроса.

Цитата(Akina @  29.4.2010,  21:56 Найти цитируемый пост)
Самому не странно?

не странно. я плохой специалист. Я вот так вижу. связал таблици джойнами, а патом сделал выборку
PM MAIL   Вверх
Akina
Дата 29.4.2010, 15:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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





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

PM MAIL WWW ICQ Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MySQL | Следующая тема »


 




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


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

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