다중 테이블 선택과 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
'programing' 카테고리의 다른 글
Fetch GET 요청을 사용하여 쿼리 문자열 설정 (0) | 2022.10.08 |
---|---|
사용자가 HTTP가 아닌 HTTPS를 통해 내 페이지에 강제로 액세스하도록 하려면 어떻게 해야 합니까? (0) | 2022.10.08 |
렌더링 후 입력 필드에 포커스를 설정하는 방법 (0) | 2022.10.08 |
matplotlib를 사용하여 범례 크기를 변경하는 방법벽면 (0) | 2022.10.02 |
Python 문자열의 u'\uff' (0) | 2022.10.02 |