복붙노트

[SQL] 내부 대 하위 쿼리는 SQL 서버에 참여

SQL

내부 대 하위 쿼리는 SQL 서버에 참여

나는 다음과 같은 질문이

내부 조인하여 첫번째

SELECT item_ID,item_Code,item_Name 
FROM [Pharmacy].[tblitemHdr] I 
    INNER JOIN  EMR.tblFavourites F ON I.item_ID=F.itemID
WHERE F.doctorID = @doctorId AND F.favType = 'I'

서브 쿼리 등을 이용하여 두 번째

SELECT item_ID,item_Code,item_Name from [Pharmacy].[tblitemHdr]
WHERE item_ID IN
(SELECT itemID FROM EMR.tblFavourites
WHERE doctorID = @doctorId AND favType = 'I'
)

이 항목 테이블 [약국]에서. [tblitemHdr는] (15 개) 컬럼과 2000 년 기록을 포함합니다. 그리고 [약국]. [tblitemHdr]는 5 열 주위에 100 개의 레코드가 포함되어 있습니다. 어떤이 시나리오에서 쿼리는 나에게 더 나은 성능을 제공합니다?

해결법

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

    1.일반적으로 내부 쿼리보다 빠르게 작동 조인하지만, 실제로는 SQL 서버에 의해 생성 된 실행 계획에 따라 달라집니다. 당신이 당신의 쿼리를 작성하는 방법에 상관없이, SQL 서버는 항상 실행 계획에 변환됩니다. 이 두 쿼리에서 같은 계획을 생성하는 "스마트"충분한 경우, 당신은 동일한 결과를 얻을 수 있습니다.

    일반적으로 내부 쿼리보다 빠르게 작동 조인하지만, 실제로는 SQL 서버에 의해 생성 된 실행 계획에 따라 달라집니다. 당신이 당신의 쿼리를 작성하는 방법에 상관없이, SQL 서버는 항상 실행 계획에 변환됩니다. 이 두 쿼리에서 같은 계획을 생성하는 "스마트"충분한 경우, 당신은 동일한 결과를 얻을 수 있습니다.

    돕기 위해 여기에 몇 가지 링크.

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

    2.SQL Server 관리 Studio에서 당신은 "클라이언트 통계"를 가능하게하고 또한 실제 실행 계획을 포함 할 수 있습니다. 이것은 당신에게 정확하게 각 요청의 실행 시간과 부하를 알 수있는 기능을 제공합니다.

    SQL Server 관리 Studio에서 당신은 "클라이언트 통계"를 가능하게하고 또한 실제 실행 계획을 포함 할 수 있습니다. 이것은 당신에게 정확하게 각 요청의 실행 시간과 부하를 알 수있는 기능을 제공합니다.

    또한, 각 요구가 캐시 성능에 부작용을 방지하기 위해 캐시를 청소

    USE <YOURDATABASENAME>;
    GO
    CHECKPOINT;
    GO
    DBCC DROPCLEANBUFFERS;
    GO
    

    나는 이론에 의존하기보다는 우리 자신의 눈으로 볼 것이 최선이라고 생각!

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

    3.가입은 빠른 서브 쿼리보다.

    가입은 빠른 서브 쿼리보다.

    , SearchExpression, 페이지 크기, DrilldownPageSize, 사용자, SearchExpression, 페이지 크기, DrilldownPageSize, 사용자 ... 그래서 사용자 : 하위 쿼리는 액세스 할 때 앞뒤로 이동 하드 디스크의 읽기 - 쓰기 바늘 (? 머리)의 생각, 바쁜 디스크 액세스있게 의 위에.

    이후는 메모리에 결합 (또는 디스크 캐시) 첫 번째 조인 된 테이블의 결과 등에 집중할 것 조인, 처음 두 테이블의 결과에 작업을 집중하여 작품을 가입 할 수 있습니다. 따라서 빠른 덜 읽기 - 쓰기 바늘의 움직임,

    출처 : 여기에

  4. ==============================

    4.하위 쿼리 대 가입

    하위 쿼리 대 가입

    표 한 20 행, 2 COLS

    표 20 개의 행 2 COLS

    하위 쿼리 20 * 20

    가입 20 * 2

    논리적, 정류

    상세한

    시스템이 단지 시간을보고, 성능 측정을 위해, 데이터를 가져 오기 위해 다시 다시 거쳐야하는 것 같이 스캔 수는 곱셈 효과를 나타냅니다

  5. ==============================

    5.첫 번째 쿼리는 우리가 모두 테이블에 합류하기 때문에 첫 번째 쿼리는 .. 두 번째 쿼리보다 낫다. 또한이 두 쿼리에 대한 계획을 설명 확인 ...

    첫 번째 쿼리는 우리가 모두 테이블에 합류하기 때문에 첫 번째 쿼리는 .. 두 번째 쿼리보다 낫다. 또한이 두 쿼리에 대한 계획을 설명 확인 ...

  6. ==============================

    6.그것은 모든 데이터와 테이블 간의 관계 매핑에 따라 달라집니다. RDBMS 규칙은 다음을 준수하지 않을 경우에도 첫 번째 쿼리를 실행하고 데이터를 가져 오는 느린 것입니다.

    그것은 모든 데이터와 테이블 간의 관계 매핑에 따라 달라집니다. RDBMS 규칙은 다음을 준수하지 않을 경우에도 첫 번째 쿼리를 실행하고 데이터를 가져 오는 느린 것입니다.

  7. from https://stackoverflow.com/questions/14052596/subquery-v-s-inner-join-in-sql-server by cc-by-sa and MIT license