嗯,我相信这是一个“旧但金”的问题。答案是:“这取决于!”。 表演是一个非常微妙的主题,所以说:“永远不要使用子查询,总是加入”太愚蠢了。 在下面的链接,你会发现,我已经发现了一些基本的最佳实践是非常有帮助的: 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