我有2个表:Mysql的集团和SUM优化
CREATE TABLE IF NOT EXISTS `products` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`categoryId` int(10) unsigned DEFAULT NULL,
`parentId` int(10) unsigned DEFAULT NULL,
`barcode` varchar(255) DEFAULT NULL,
`code` varchar(255) DEFAULT NULL,
`name` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `fk_products_product_categories1_idx` (`categoryId`),
KEY `fk_products_products1_idx` (`parentId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=71521 ;
CREATE TABLE IF NOT EXISTS `inventory` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`depotId` int(10) unsigned NOT NULL,
`productId` int(10) unsigned NOT NULL,
`remain` int(11) DEFAULT NULL,
`remain2` int(10) unsigned DEFAULT NULL,
`updatedDateTime` datetime DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `fk_inventory_depots1_idx` (`depotId`),
KEY `fk_inventory_products1_idx` (`productId`),
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=89291 ;
请帮我优化下面的查询(应该添加哪些指标来提高性能),查询花费0.2578秒(MySQL的使用指数fk_inventory_depots1_idx ),当移除AND i.depotId = 3时,查询耗时0.5484秒。 EXPLAIN查询显示Extra:使用where;使用临时;使用文件排序
SELECT `p`.* , SUM(i.remain) AS `remain` , SUM(i.remain2) AS `remain2`
FROM `products` AS `p`
LEFT JOIN `inventory` AS `i` ON p.id = i.productId
WHERE remain != 0 AND i.depotId = 3
GROUP BY `p`.`id`
ORDER BY `p`.`id` DESC
LIMIT 50
上创建'inventory'表'(的productId,保持,depotId)'一个索引。希望这有助于... – Meherzad 2013-04-26 05:36:53