programing

다중 테이블 선택과 JOIN (퍼포먼스)

firstcheck 2022. 10. 8. 08:43
반응형

다중 테이블 선택과 JOIN (퍼포먼스)

MySQL의 여러 테이블에서 선택하는 경우 다음 쿼리 모두 동일한 결과 집합을 반환합니다.

이러한 질문 중 하나가 다른 질문보다 더 나은가요, 아니면 더 효율적인가요?작은 데이터 세트(테이블당 약 2000 행)에 대해 테스트한 결과, 둘 다 거의 같은 실행 시간에 동일한 결과 세트를 반환했습니다.

질문 1:

SELECT
    *
FROM
    products,
    product_meta,
    sales_rights
WHERE 
    (
        products.id = product_meta.product_id
        AND products.id = sales_rights.product_id
    )
    AND (...)
LIMIT 0,10;


질문 2:

SELECT
    *
FROM
    products
INNER JOIN product_meta ON products.id = product_meta.product_id
JOIN sales_rights ON product_meta.product_id = sales_rights.product_id 
WHERE
    (...)
LIMIT 0,10;

이들은 동일하지만 구문이 다릅니다.따라서 두 구문 간의 성능 차이는 예상할 수 없습니다.단, 마지막 구문(ANS SQL-92 구문)이 권장됩니다.자세한 내용은 다음을 참조하십시오.

는 이 실이 훌륭한 설명을 한다고 생각한다.

INSI JOIN은 ANSI 구문입니다.

특히 많은 테이블을 결합할 때 일반적으로 더 읽기 쉬운 것으로 간주됩니다.

또한 필요할 때마다 OUTER JOIN으로 쉽게 교체할 수 있습니다.

WHERE 구문은 보다 관계형 모델 지향적입니다.

2개의 테이블 JOIN'ed의 결과는 필터가 적용되는 테이블의 데카르트 곱으로 결합 컬럼이 일치하는 행만 선택합니다.

WHERE 구문을 사용하면 더 쉽게 확인할 수 있습니다.

예를 들어 MySQL(및 일반적으로 SQL)에서는 이러한 두 가지 쿼리가 동의어입니다.

또한 MySQL에는 STRAYT_JOIN 절도 있습니다.

이 구를 사용하면 외부 루프에서 스캔되는 테이블과 내부 루프에서 스캔되는 테이블을 JOIN 순서를 제어할 수 있습니다.

MySQL에서는 WHERE 구문을 사용하여 제어할 수 없습니다.

언급URL : https://stackoverflow.com/questions/13476029/multiple-table-select-vs-join-performance

반응형