2010-01-04 115 views
-1

我有三個表,這些字段:哪一個查詢具有更好的性能?

:class_id |名稱|等級

classes_students:class_id | student_id

學生:student_id |名字

班級與學生有一定比例的關係,所以一個班級可以有很多學生,一個學生可以聽很多班級。我想選擇class_id爲5的特定班級的所有學生。

這裏有三個查詢可以做同樣的事情。我針對MySQL最新版本InnoDB引擎運行。哪一個會表現出更好的表現,爲什麼?

查詢A)

SELECT s.name 
    FROM students s 
    JOIN classes_students cs ON cs.student_id = s.student_id AND cs.class_id = 5 

查詢B)

SELECT s.name 
    FROM students s 
    JOIN classes_students cs ON cs.student_id = s.student_id 
    JOIN classes c ON c.class_id = cs.class_id 
WHERE c.class_id = 5 

查詢C)

SELECT s.name 
FROM students s 
INNER JOIN classes_students cs ON cs.student_id = s.student_id 
WHERE cs.class_id = 5 
+0

在提出的查詢的查詢計劃中可能沒有任何顯着差異。但C是表達查詢內容的最自然的方式;跟着去吧。 – bobince 2010-01-04 10:12:29

+0

我已經低估了這個問題。 OP是否設定爲測試?爲什麼OP沒有告訴我們哪個顯示更好的性能。 – 2010-01-04 10:47:11

回答

1

MySQL提供的EXPLAIN語句,將您詳細的執行計劃。

我沒有運行它,但我敢打賭,這三個查詢處理方式完全一樣。

如果你真的需要調整MySQL優化器,你可以看看STRAIGHT_JOIN操作符,但MySQL通常很聰明。

3

知道唯一正確的方法是到t ry他們全部,並比較你的環境表現。 總是在您的環境中測試查詢,並對它們進行基準測試,以查看實際執行情況的最佳方式,因爲您永遠無法真正瞭解其他情況。

一般而言,假設所有索引都已到位,我期望B最差,因爲它包含更多JOIN /更多表。 A和C,我期望是一樣的(可能會進行優化,以相同的執行計劃)

相關問題