まあ、それは「古くて金」の質問だと思います。答えは、「場合によります」です。パフォーマンスは非常にデリケートなテーマであり、「サブクエリを使用せず、常に参加する」と言っても馬鹿げているでしょう。次のリンクには、私が非常に役立つとわかった基本的なベストプラクティスがいくつかあります。
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です。