嗯,我认为这是一个“千古难题”。答案是:“这取决于情况!”。
性能是一个非常微妙的问题,仅仅说“永远不要使用子查询,总是连接”太过幼稚。
在以下链接中,您会找到一些基本最佳实践,我发现它们非常有帮助:
我有一个包含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,干得漂亮。