글쎄, 나는 그것이 "오래되었지만 금"질문이라고 믿는다. 대답은 "상황에 따라 다릅니다!"입니다. 공연은 너무 섬세해서 "서브 쿼리를 사용하지 말고 항상 참여하라"고 말하기에는 너무 어리석은 주제입니다. 다음 링크에서 내가 매우 유용하다고 판단한 몇 가지 기본 모범 사례를 찾을 수 있습니다.
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, 좋아요.