0

次の SQL クエリを最適化するためのアイデアはありますか? 実行にはかなりの時間がかかります。製品によって異なりますが、通常は約 3 ~ 8 秒です。

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

ありがとう!

4

1 に答える 1

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 
于 2012-11-21T23:18:10.100 に答える