好吧,我相信这是一个“古老而又黄金”的问题。答案是:“取决于!”。表演是如此精致,以至于说:“从不使用子查询,总是加入”,这太愚蠢了。在以下链接中,您会发现一些我发现非常有帮助的基本最佳实践:
我有一个包含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.9秒。
我的查询最后是这样的:
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.0256秒
好的SQL,好的。