Оптимизация запроса

TutanXamoN

Новичок
Оптимизация запроса

PHP:
SELECT catalogs.cat, NULL , (
SELECT SUM( `quantity` )
FROM `cat_orders`
WHERE cat_orders.cat_id = catalogs.id
AND cat_orders.subcat_id =0
AND cat_orders.fin = true
GROUP BY `cat_id`
) AS vidano, catalogs.quantity
FROM `catalogs` , `cat_orders`
WHERE cat_orders.active =1 AND cat_orders.fin = true
GROUP BY catalogs.id
UNION
SELECT catalogs.cat, subcat.name, (
SELECT SUM( `quantity` )
FROM `cat_orders`
WHERE cat_orders.cat_id = catalogs.id   AND cat_orders.fin = true
AND cat_orders.subcat_id = subcat.id
GROUP BY `cat_id` , `subcat_id`
) AS vidano, subcat.quantity
FROM `catalogs` , `cat_orders` , `subcat`
WHERE cat_orders.active =1  AND cat_orders.fin = true
AND catalogs.id = subcat.cat_id
GROUP BY catalogs.id, subcat.id
Есть вот такой чудный запрос который выполняется ОЧЕНЬ долго суть запроса - Отобразить кол-во выданных каталогов + остаток каталогов на складе.
структура таблиц:



МБ стоит генерить статистику не в реалтайм а кроном + в отдельной таблице хранить?
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
TutanXamoN
где explain?
где show table а не то что Вы написали?

Где? то что пишется в каждом топике в этой ветке форума относительнро оптимизации выборки?
 

TutanXamoN

Новичок
explain:
PHP:
1	PRIMARY	catalogs	ALL	NULL	NULL	NULL	NULL	6	Using temporary; Using filesort
1	PRIMARY	cat_orders	ALL	NULL	NULL	NULL	NULL	2563	Using where
2	DEPENDENT SUBQUERY	cat_orders	ALL	NULL	NULL	NULL	NULL	2563	Using where; Using temporary; Using filesort
3	UNION	cat_orders	ALL	NULL	NULL	NULL	NULL	2563	Using where; Using temporary; Using filesort
3	UNION	subcat	ALL	NULL	NULL	NULL	NULL	91	 
3	UNION	catalogs	eq_ref	PRIMARY	PRIMARY	4	ottocom_otto.subcat.cat_id	1	 
4	DEPENDENT SUBQUERY	cat_orders	ALL	NULL	NULL	NULL	NULL	2563	Using where; Using temporary; Using filesort
NULL	UNION RESULT	<union1,3>	ALL	NULL	NULL	NULL	NULL	NULL	 






CREATE TABLE `cat_orders` (
  `ido` int(11) NOT NULL auto_increment,
  `cat_id` int(11) default NULL,
  `subcat_id` int(11) NOT NULL default '0',
  `user_id` int(11) default NULL,
  `quantity` int(11) default NULL,
  `addr` text NOT NULL,
  `delivery` tinyint(1) NOT NULL default '0',
  `ret` tinyint(1) NOT NULL default '0',
  `deltime` datetime default NULL,
  `rettime` datetime default NULL,
  `delpr` tinyint(1) NOT NULL default '0',
  `retpr` tinyint(1) NOT NULL default '0',
  `active` tinyint(1) NOT NULL default '1',
  `fin` tinyint(1) NOT NULL default '0',
  `deliverytime` datetime NOT NULL default '0000-00-00 00:00:00',
  `phone` varchar(20) NOT NULL default '',
  `gid` int(11) NOT NULL default '0',
  PRIMARY KEY  (`ido`)
) 


CREATE TABLE `catalogs` (
  `id` int(11) NOT NULL auto_increment,
  `cat` char(40) default NULL,
  `quantity` int(11) NOT NULL default '0',
  PRIMARY KEY  (`id`)
) 

CREATE TABLE `subcat` (
  `id` int(11) NOT NULL auto_increment,
  `cat_id` int(11) default NULL,
  `name` varchar(40) default NULL,
  `quantity` int(11) NOT NULL default '0',
  PRIMARY KEY  (`id`)
)
 

Gas

может по одной?
1. самым первым делом читать это;
2. потом прочитать описание explain'а, чтоб ориентироваться, какой результат дало добавление индексов;
3. по этой ссылке находишь конструкции, которые присутствуют в запросе и читаешь как их ускорить.
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
В первую очередь обратите внимание на type експлайна
 

TutanXamoN

Новичок
Gas
Всё может быть, структура базы не моя и ой как не хотелось её трогать а таки надо.
 

Gas

может по одной?
TutanXamoN
структура это не только набор полей, это ещё и индексы, речь идёт именно о них.
 

TutanXamoN

Новичок
Всем сенкс - летать ещё не летает но скорость уже уверенно набираеццо)
 
Сверху