2015-01-08 54 views
0

我有2個SQL語句產生相同的結果,但想知道哪一個選擇?選擇使用較少的加載時間的SQL語句

可以說1有3個表:

  1. 供應商
  2. supplier_status
  3. supplier_contact

聲明1)

SELECT a.*, b.status_name 
    (SELECT c.name FROM contact c 
    WHERE c.supplier_id = a.supplier_id 
    ORDER BY c.contact_id DESC limit 1) AS contact_name 
FROM supplier a LEFT JOIN supplier_status b 
ON a.status_id = b.status_id 

聲明2)

SELECT a.*, b.status_name, c.name AS contact_name 
FROM supplier a LEFT JOIN supplier_status b 
ON a.status_id = b.status_id 
LEFT JOIN (SELECT name, supplier_id 
    FROM contact 
    ORDER BY contact_id DESC 
) c ON a.supplier_id = c.supplier_id 
GROUP BY a.supplier_id 
+0

那麼這取決於你想要你的代碼看起來像什麼。你想要我們的意見? – ouflak

+2

也許這只是我,但我認爲你想要完成什麼的解釋將有助於獲得良好的答案。 –

+2

用'EXPLAIN'運行它們來預置查詢,根據[EXPLAIN輸出]的文檔檢查結果(http://dev.mysql.com/doc/refman/5.7/en/explain-output.html) – axiac

回答

0

嘗試此查詢:

SELECT a.*, b.status_name, c.name AS contact_name 
FROM supplier a 
    LEFT JOIN supplier_status b ON a.status_id = b.status_id 
    LEFT JOIN contact c ON a.supplier_id = c.supplier_id 
    LEFT JOIN contact d ON c.supplier_id = d.supplier_id AND c.contact_id < d.contact_id 
WHERE d.contact_id IS NULL 

這是可能的,它不會產生相同的結果,你(我沒有測試),但如果是的話那麼你所要做的就是確保出現在JOIN條件中的字段被索引(它們可能是FK s,所以它們已經是)。