복붙노트

[SQL] SQL 문에서 하위 쿼리 'IN'을 사용하여

SQL

SQL 문에서 하위 쿼리 'IN'을 사용하여

우리가 가입 사용할 수있는 장소에서 SQL 문에서 "IN"키워드를 사용하여 성능 문제가 있습니까?

SELECT xxx
FROM xxx
WHERE ID IN (SELECT Id FROM xxx)

해결법

  1. ==============================

    1.아니, 그것의 확인을 사용할 수 있습니다.

    아니, 그것의 확인을 사용할 수 있습니다.

    당신은 어떤 또한 INTERSECT를 지원하는 모든 RDBMS에 존재 IN을 사용하여 위의 쿼리를 작성할 수 있습니다.

    의미 론적으로이 반에 참여하는 "내게 TableB의에서 적어도 하나의 일치가 테이블 A에서 행을 제공"입니다. 내부는 가입 "일치하는 모든 행 줘"입니다

    그래서 표가 3 개 행이 표가 일치하는 5 개의 행이있는 경우 :

    이런 이유로 IN과 나, 그리고 여기에 다른 SQL 유형으로 밀어 EXISTS : A는 가입 잘못, DISTINCT 필요하고 속도가 느려집니다.

    IN이 SQL 서버 (그것은 다른 사람 않습니다)하지 않는, 지원의 여러 열 조인 존재한다.

  2. ==============================

    2.오히려 뚜렷한보다 당신에 의해 그룹을 사용할 수 있습니다. 내가 가입하여 더 나은 응답 시간을 가지고 경우가 있었다. 일반적으로 나는 기본 키 / 외래 키 관계를 통해 모든 행에 합류하고 있고 비 키 컬럼에보고된다 때. 여러 조인 특히합니다. IN 때때로 인덱스 스캔을 강제 할 수 있으며 일반적으로는 PK로가는 경우가 추구 사용합니다 가입 할 수 있습니다. 당신이 디자인 할 때 그들은 같은 순서에 명시 적으로 PK / FK 관계를 선언 있도록 테이블은 기본 키를 일렬로. PK / FK 국한되지 않습니다하세요. 그러나 조인의 일반적인 용도는 정렬 키가 최상의 성능입니다 함께 참여하여 PK / FK 관계와 그 경우에 내 경험을 산책하는 것입니다.

    오히려 뚜렷한보다 당신에 의해 그룹을 사용할 수 있습니다. 내가 가입하여 더 나은 응답 시간을 가지고 경우가 있었다. 일반적으로 나는 기본 키 / 외래 키 관계를 통해 모든 행에 합류하고 있고 비 키 컬럼에보고된다 때. 여러 조인 특히합니다. IN 때때로 인덱스 스캔을 강제 할 수 있으며 일반적으로는 PK로가는 경우가 추구 사용합니다 가입 할 수 있습니다. 당신이 디자인 할 때 그들은 같은 순서에 명시 적으로 PK / FK 관계를 선언 있도록 테이블은 기본 키를 일렬로. PK / FK 국한되지 않습니다하세요. 그러나 조인의 일반적인 용도는 정렬 키가 최상의 성능입니다 함께 참여하여 PK / FK 관계와 그 경우에 내 경험을 산책하는 것입니다.

  3. ==============================

    3.당신이 여기에서 읽을 수 있듯이, 빠른 하위 선택보다 결합합니다.

    당신이 여기에서 읽을 수 있듯이, 빠른 하위 선택보다 결합합니다.

  4. from https://stackoverflow.com/questions/6966023/using-in-with-a-sub-query-in-sql-statements by cc-by-sa and MIT license