2010-07-12 46 views
2

我知道最好的方法是不要在其他sql裏面有任何sql,特別是複雜的,並且最好在查詢之後使用分析,但是因爲系統的構建方式,我只會假裝只做它在一個查詢這個SQL(mySQL)的任何優化想法?

這裏是有問題的查詢(「是一個很酷的查詢」)

SELECT DISTINCT 
    o.orders_id, 
    o.faltantes, 
    o.customers_name, 
    o.payment_method, 
    o.date_purchased, 
    o.last_modified, 
    o.currency, 
    o.currency_value, 
    ot.text   AS order_total, 
    st.stores_name 
FROM (orders o 
    LEFT JOIN orders_total ot 
    ON (o.orders_id = ot.orders_id), 
    stores st, 
    orders_status s) 
    INNER JOIN orders_products op 
    ON (o.orders_id = op.orders_id) 
WHERE o.orders_status != 19 
    AND ot.class = 'ot_total' 
    AND (ot.value > (SELECT 
         SUM(pc.monto)  +SUM(p.monto) 
        FROM pagos_clientes pc, 
         pagos p 
        WHERE p.id_pago = pc.id_pago 
         AND pc.id_oferta = o.orders_id) 
      OR (SELECT 
       SUM(pc.monto)  +SUM(p.monto) 
       FROM pagos_clientes pc, 
       pagos p 
       WHERE p.id_pago = pc.id_pago 
        AND pc.id_oferta = o.orders_id)IS NULL) 
    AND payment_method != 'Cambio por faltantes' 
    AND o.orders_stores_id = '3' 
    AND o.orders_stores_id = st.stores_id 
    AND ((o.orders_stores_id IN(1,3)) 
      OR (op.products_distributors_id = '0')) 
GROUP BY o.orders_id 
ORDER BY o.orders_id DESC 

由於任何人都可以解決這個問題:d(目前需要以防萬一2分鐘實時)

+3

你對各種表格有什麼指標?你有沒有對查詢做過解釋? – 2010-07-12 09:25:23

+0

這是一個查詢由oscommerce,whith幾個額外的字段 oscommerce具有myisam上的所有表與一個主鍵是autonumeric他們沒有任何關係 在這裏你有解釋結果:http:// www。 todoastros.com/explain.htm 感謝您的回答;) – Saikios 2010-07-12 09:35:25

回答

2

通常將子查詢移動到FROM是一項重大改進。 http://dev.mysql.com/doc/refman/5.1/en/rewriting-subqueries.html

不要使用逗號連接,正確連接和逗號連接的組合通常會中斷。
我看到orders_status的表與其他表沒有任何關係。 添加適當的關係應該會多次提高性能。

Use EXPLAIN分析查詢性能並找到優化的地方。

+0

非常感謝你,這是orders_status,它仍然來自一箇舊的查詢, 個人我討厭加入,現在我恨德國人,因爲他們擊敗阿根廷在WC(2006年,2010年,當然,特別是1990年),但在這一刻,是因爲他們建立的電子商務:D 再次感謝ou Naktibalda:D 任何方式我知道,我必須優化代碼:P – Saikios 2010-07-12 09:51:29

0

EXPLAIN的輸出顯示沒有足夠的索引讓您的查詢能夠在不執行全表掃描的情況下運行。最壞的罪犯是orders_products表,它在orders_id列中沒有合適的索引。

您應該檢查您的JOIN條件中使用的每個列都有索引。僅此一項就會有很大的幫助。

+0

謝謝麥克我會檢查:) – Saikios 2010-07-12 09:54:32