2012-11-21 160 views
0

优化以下SQL查询的任何想法?运行需要相当长的时间。通常大约3-8秒,取决于它是哪种产品。优化MySQL查询 - 运行时间长

SELECT 
`serviceid` 

FROM 
`services` 

INNER JOIN `products` ON `serviceid`=products.`id` 

WHERE 
`orderid` IN 
(
    SELECT `orderid` FROM `orders_items`,`orders` 

    WHERE 
    `orderid`=orders.`id` AND 
    `status` > '2' AND 
    `serviceid`='___SYSTEM_VARIABLE___' 
) 

AND NOT 
`serviceid`='___SYSTEM_VARIABLE___' AND 
products.`state`='1' AND 
products.`stock` > 0 

GROUP BY 
`serviceid` 

ORDER BY 
COUNT(`serviceid`) DESC LIMIT 15 

谢谢!

+2

你可能会需要向我们展示SHOW的'输出CREATE TABLE'每个上面提到的表,以及' EXPLAIN SELECT'用于该查询。 – whamma

回答

0

删除in(select ...)并将其作为更多连接滚动到主查询中。这是我的猜测,因为我不知道你的表结构:

SELECT 
    `serviceid` 
FROM 
    `services` 
    INNER JOIN `products` 
    ON `serviceid` = products.`id` 
    INNER JOIN `orders` 
    ON `products`.`orderid` = `orders`.`id` 
    INNER JOIN `orders_items` 
    ON `orderid` = `orders`.`id` 
WHERE services.`serviceid` = '___SYSTEM_VARIABLE___' 
    AND products.`state` = '1' 
    AND products.`stock` > 0 
    AND `orders`.`status` > '2' 
    AND `orders`.`serviceid` = '___SYSTEM_VARIABLE___' 
GROUP BY `serviceid` 
ORDER BY COUNT(`serviceid`) DESC 
LIMIT 15