product
テーブル(1番目の選択)から製品の説明を取得するクエリがあり、次にそれを次のサブクエリステートメントに減算してnoを取得します。残りの株式の:(2)inventory
テーブルで購入各製品の複数のサブクエリ結合によるクエリの最適化
-sum sales_detail
テーブル(3)で販売されている各製品、各製品の
-sumの
-sumを別に移しstock_transfer
テーブル内のブランチ(4)(第5回)damaged_product
テーブルに破損してしまった各製品の
-sumは
問題は毎回のTHIですクエリがロードされると、すべての4つのテーブルを完全に検索してquantity
列の合計を取得します。時間の経過とともに、より多くのレコードが保存され、クエリが遅くなります。助言がありますか?
SELECT p.Id,p.Product_Name Product,p.Description, c.Category_Name Category,sc.Subcategory_Name Subcategory,s.Supplier_Name Supplier, p.Selling_Price `Unit Price`,i.Stocks,s.Sales, i.Stocks - IFNULL(s.Sales, 0) - IFNULL(t.Transfer, 0) - IFNULL(d.Damage, 0) AS Remaining
FROM (SELECT Id, Product_Name, Description, Selling_Price, Category_Id, Subcategory_Id, Supplier_Id FROM product WHERE enable_flag = 1) p
LEFT OUTER JOIN(SELECT product_id, COALESCE(SUM(quantity), 0) AS Stocks
FROM inventory
WHERE enable_flag = 1 GROUP BY product_id) i ON p.Id = i.product_id
LEFT OUTER JOIN(SELECT product_id, COALESCE(SUM(quantity), 0) AS Sales
FROM sales_detail
WHERE enable_flag = 1 GROUP BY product_id) s USING(product_id)
LEFT OUTER JOIN(SELECT product_id, COALESCE(SUM(transfer_quantity), 0) AS Transfer
FROM stock_transfer
WHERE enable_flag = 1 GROUP BY product_id) t USING(product_id)
LEFT OUTER JOIN(SELECT product_id, COALESCE(SUM(damaged_quantity), 0) AS Damage
FROM damaged_product
WHERE enable_flag = 1 GROUP BY product_id) d USING(product_id)
JOIN Category c ON p.Category_Id=c.Id
JOIN Subcategory sc ON p.Subcategory_Id=sc.Id
JOIN Supplier s ON p.Supplier_Id=s.Id;
ヒント@Gordon Linoffありがとう!私はこれを試し、テストが終わったらそれを受け入れてタグ付けします –