以下是我需要优化的查询。
SELECT
        UPPER(IFNULL(op.supplier_payment_method,s.default_payment_method)) AS Payment_Method,
        op.supplier_payment_date AS Payment_Date,
        Date_format(IFNULL(op.supplier_payment_date,op.ship_date),'%M %Y') AS Payment_Month,
        s.supplier_name AS Farm,
        op.sub_order_id AS Order_num,
        Date_format(op.ship_date,'%b-%d-%Y') AS Ship_Date,
        op.farm_credit AS Farm_Credit,
        op.credit_memo AS Credit_Memo,
        op.credit_description AS Credit_Description,
        opb.boxes AS Box_Type,
        CONCAT('$',FORMAT(op.box_charge,2)) AS Box_Charge,
        op.invoice_num AS Invoice_num,
        CONCAT('$',FORMAT(op.invoice_amt,2)) AS Invoice_Amt,
        CONCAT('$',FORMAT(op.total_invoice_amt,2)) AS Total_Invoice_Amt,
        CONCAT(op.UM_qty,' ',op.UM_type) AS St_Bu_Qty,
        op.PO_Product_Name AS Invoice_desc,
        CONCAT('$',FORMAT((op.price_um*op.um_qty),2)) AS Cost_product_cms,
        op.supplier_invoice_note AS Supplier_Invoice_Notes,
        CONCAT('$',FORMAT(op.cms_invoice_cost,2)) AS CMS_Invoice_diff,
        CONCAT('$',FORMAT(op.total_farm_cost,2)) AS Farm_Cost
    FROM 
        orders_products op
        INNER JOIN 
            suppliers s ON s.supplier_id = op.supplier_name
        LEFT JOIN
            (
                SELECT 
                    sub_order_id, 
                    GROUP_CONCAT(CONCAT(box_type_qty,' ',bo.box_option_name) SEPARATOR ', ') AS boxes
                FROM
                    order_products_boxes opb
                    INNER JOIN box_options bo ON bo.id=opb.box_type_id
                GROUP BY
                    opb.sub_order_id
            ) opb ON opb.sub_order_id = op.sub_order_id
    WHERE
        op.order_active=0
        AND op.ship_date>='2013-03-01'
        AND op.ship_date<='2013-04_01'
    ORDER BY op.ship_date DESC
如您所见,查询由 4 个表组成,每个表包含大约 20k-30k 行。因此,只要我添加子查询,查询就会变得异常缓慢。仅获取 500 行记录大约需要 1.5 分钟。有没有办法在单个查询中加快速度?