Как бы оптимизировать запрос?!

grin

Guest
Как бы оптимизировать запрос?!

вот код:
PHP:
$result_geometry = $conn->CacheExecute("SELECT * FROM wares WHERE name != \"\" ORDER BY name ASC");
while (!$result_geometry->EOF) {
	for($i=1; $i<=12; $i++)
	{
		$result_sum = $conn->CacheExecute("
			SELECT SUM( boxes.price ) AS sum
			FROM shipment_items
			LEFT JOIN boxes ON boxes.box_id = shipment_items.box_id
			LEFT JOIN shipments ON shipments.shipment_id = shipment_items.shipment_id
			WHERE shipments.sent <= '".$year."-".$i."-31' AND shipments.sent >= '".$year."-".$i."-01' AND boxes.ware_id = ".$result_geometry->fields['ware_id']."
		");
		$ArrayMM_sum[] = ($result_sum->fields['sum'] != 0) ? number_format($result_sum->fields['sum'], 0, '', '') : "-";
	}
	$array_geometry[] = array_merge($result_geometry->fields, array('stat' => $ArrayMM_sum));
	unset($ArrayMM_sum);
	$result_geometry->MoveNext();
}
таблицы:
boxes - 11921 записей
shipments - 1609 записей
shipment_items - 7985 записей
индексы стоят
торомзит все это дело жуть, как бы побыстрее сделать?
 

Demiurg

Guest
Опиши структуру БД, и скажи, что надо получить.
 

grin

Guest
PHP:
 wares:
--------------------------
ware_id - mediumint(9) 
name - varchar(64) 

boxes:
---------------------------
box_id - varchar(12)
ware_id - mediumint(9)
price - float 

shipment_items:
---------------------------
shipment_id - mediumint(9)
box_id - varchar(12) 

shipments:
---------------------------
shipment_id - mediumint(9)
sent - date
В shipments находяться заказы, дата заказа shipments.sent, в заказе может быть несколько коробок (boxes), объеденяет их shipment_items, wares - это один из параметров boxes, надо вывести статистику сумм заказов по wares и коробкам (boxes.price) за год (по месяцам) используя дату shipments.sent, т.е. на скока денег заказанно в месяц по wares`ам
 

Demiurg

Guest
select wares.name , boxes.box_id , DATE_FORMAT(shipments.date , '%m') mon , sum(boxes.price)
from
boxes , wares , shipment_items , shipments
where boxes.ware_id = wares.ware_id and
shipment_items.box_id = boxes.box_id and
shipment_items.shipment_id = shipments.shipment_id and
shipments.date between '...' and '...'
group by wares.id , boxes.box_id , mon
 

grin

Guest
вот блин, я как-то об этом не подумал, вообщем большой сенкс и респект гуру мускуля. :)
 
Сверху