아래 두 개의 쿼리는 동일한 결과를 제공합니다. 성능 측면에서 어느 것이 더 나은지 알고 싶습니다.SQL을 작성하는 가장 좋은 방법은
쿼리 1 :
SELECT N.*
FROM NOTIFICATIONS N
JOIN NOTIFICATION_COMPANY_GROUPS NCG
ON (N.COMPANY_ID = NCG.COMPANY_ID
AND N.ID = NCG.NOTIFICATION_ID)
JOIN COMPANY_USER_GROUPS CUG
ON (N.COMPANY_ID = CUG.COMPANY_ID
AND CUG.COMPANY_GROUP_ID = NCG.COMPANY_GROUP_ID)
JOIN NOTIFICATION_PROPERTIES NP ON (N.COMPANY_ID = NP.COMPANY_ID)
JOIN COMPANY_USER_PROPERTIES CUP
ON (N.COMPANY_ID = CUP.COMPANY_ID
AND CUP.PROPERTY_ID = NP.PROPERTY_ID)
WHERE N.COMPANY_ID = 2138
AND CUG.COMPANY_USER_ID = 41422
AND CUP.COMPANY_USER_ID = 41422;
질의 2 :
SELECT N.*
FROM NOTIFICATIONS N
JOIN NOTIFICATION_COMPANY_GROUPS NCG
ON (N.COMPANY_ID = 2138
AND N.COMPANY_ID = NCG.COMPANY_ID
AND N.ID = NCG.NOTIFICATION_ID)
JOIN COMPANY_USER_GROUPS CUG
ON (CUG.COMPANY_USER_ID = 41422
AND N.COMPANY_ID = CUG.COMPANY_ID
AND CUG.COMPANY_GROUP_ID = NCG.COMPANY_GROUP_ID)
JOIN NOTIFICATION_PROPERTIES NP ON (N.COMPANY_ID = NP.COMPANY_ID)
JOIN COMPANY_USER_PROPERTIES CUP
ON (CUP.COMPANY_USER_ID = 41422
AND N.COMPANY_ID = CUP.COMPANY_ID
AND CUP.PROPERTY_ID = NP.PROPERTY_ID);
쿼리 플래너는 이러한 두 가지 폼을 동등하게 처리해야합니다. 즉, * 특정 * SQL 구현에서 쿼리 계획을보고 놀라움이 있는지 확인해야합니다. 즉, 모든 (그리고 유일한) JOIN 조건은 'ON ..'비트와 'WHERE'의 나머지 부분에 모두 포함하는 것이 좋습니다. 즉, 첫 번째 형식을 권장합니다. 외부 쿼리를 읽고 이해하기 쉽고 생성, 수정 또는 통합하기가 더 쉽습니다. – user2864740
왜 측정하지 않습니까? 나머지 : 가능한 한 쉽게 이해할 수 있도록 진술을 작성하십시오 (약간의 취향/사고 방식). 이렇게하면 문장이 의미 상으로 정확 해지고 유지 보수하기가 쉬워집니다. 성능 문제가 발생할 경우에만 대안을 시도하십시오. ("조기 최적화는 모든 악의 뿌리입니다", D.E.Knuth) – Ronald