嗯,我相信這是一個「舊但金」的問題。答案是:「這取決於!」。 表演是一個非常微妙的主題,所以說:「永遠不要使用子查詢,總是加入」太愚蠢了。 在下面的鏈接,你會發現,我已經發現了一些基本的最佳實踐是非常有幫助的: Here 1 Here 2 Here 3
我有50000元的表格,結果我一直在尋找爲739元。
我在第一個查詢是這樣的:
SELECT p.id,
p.fixedId,
p.azienda_id,
p.categoria_id,
p.linea,
p.tipo,
p.nome
FROM prodotto p
WHERE p.azienda_id = 2699 AND p.anno = (
SELECT MAX(p2.anno)
FROM prodotto p2
WHERE p2.fixedId = p.fixedId
)
,並花了7.9s執行。
我最後的查詢是這樣的:
SELECT p.id,
p.fixedId,
p.azienda_id,
p.categoria_id,
p.linea,
p.tipo,
p.nome
FROM prodotto p
WHERE p.azienda_id = 2699 AND (p.fixedId, p.anno) IN
(
SELECT p2.fixedId, MAX(p2.anno)
FROM prodotto p2
WHERE p.azienda_id = p2.azienda_id
GROUP BY p2.fixedId
)
,並花了0.0256s
SQL好,好。
另請參閱http://stackoverflow.com/questions/2577174/sql-join-vs-subquery – Lucero 2010-10-04 14:44:21
@Lucero,這個問題被標記爲sql-server-2008,其中你提到的帖子標記爲MySql。你可以推斷答案是一樣的。性能優化在兩個RDBMS上完成的方式不同。 – 2012-04-25 15:35:54