[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.일반적으로 내부 쿼리보다 빠르게 작동 조인하지만, 실제로는 SQL 서버에 의해 생성 된 실행 계획에 따라 달라집니다. 당신이 당신의 쿼리를 작성하는 방법에 상관없이, SQL 서버는 항상 실행 계획에 변환됩니다. 이 두 쿼리에서 같은 계획을 생성하는 "스마트"충분한 경우, 당신은 동일한 결과를 얻을 수 있습니다.
일반적으로 내부 쿼리보다 빠르게 작동 조인하지만, 실제로는 SQL 서버에 의해 생성 된 실행 계획에 따라 달라집니다. 당신이 당신의 쿼리를 작성하는 방법에 상관없이, SQL 서버는 항상 실행 계획에 변환됩니다. 이 두 쿼리에서 같은 계획을 생성하는 "스마트"충분한 경우, 당신은 동일한 결과를 얻을 수 있습니다.
돕기 위해 여기에 몇 가지 링크.
-
==============================
2.SQL Server 관리 Studio에서 당신은 "클라이언트 통계"를 가능하게하고 또한 실제 실행 계획을 포함 할 수 있습니다. 이것은 당신에게 정확하게 각 요청의 실행 시간과 부하를 알 수있는 기능을 제공합니다.
SQL Server 관리 Studio에서 당신은 "클라이언트 통계"를 가능하게하고 또한 실제 실행 계획을 포함 할 수 있습니다. 이것은 당신에게 정확하게 각 요청의 실행 시간과 부하를 알 수있는 기능을 제공합니다.
또한, 각 요구가 캐시 성능에 부작용을 방지하기 위해 캐시를 청소
USE <YOURDATABASENAME>; GO CHECKPOINT; GO DBCC DROPCLEANBUFFERS; GO
나는 이론에 의존하기보다는 우리 자신의 눈으로 볼 것이 최선이라고 생각!
-
==============================
3.가입은 빠른 서브 쿼리보다.
가입은 빠른 서브 쿼리보다.
, SearchExpression, 페이지 크기, DrilldownPageSize, 사용자, SearchExpression, 페이지 크기, DrilldownPageSize, 사용자 ... 그래서 사용자 : 하위 쿼리는 액세스 할 때 앞뒤로 이동 하드 디스크의 읽기 - 쓰기 바늘 (? 머리)의 생각, 바쁜 디스크 액세스있게 의 위에.
이후는 메모리에 결합 (또는 디스크 캐시) 첫 번째 조인 된 테이블의 결과 등에 집중할 것 조인, 처음 두 테이블의 결과에 작업을 집중하여 작품을 가입 할 수 있습니다. 따라서 빠른 덜 읽기 - 쓰기 바늘의 움직임,
출처 : 여기에
-
==============================
4.하위 쿼리 대 가입
하위 쿼리 대 가입
표 한 20 행, 2 COLS
표 20 개의 행 2 COLS
하위 쿼리 20 * 20
가입 20 * 2
논리적, 정류
상세한
시스템이 단지 시간을보고, 성능 측정을 위해, 데이터를 가져 오기 위해 다시 다시 거쳐야하는 것 같이 스캔 수는 곱셈 효과를 나타냅니다
-
==============================
5.첫 번째 쿼리는 우리가 모두 테이블에 합류하기 때문에 첫 번째 쿼리는 .. 두 번째 쿼리보다 낫다. 또한이 두 쿼리에 대한 계획을 설명 확인 ...
첫 번째 쿼리는 우리가 모두 테이블에 합류하기 때문에 첫 번째 쿼리는 .. 두 번째 쿼리보다 낫다. 또한이 두 쿼리에 대한 계획을 설명 확인 ...
-
==============================
6.그것은 모든 데이터와 테이블 간의 관계 매핑에 따라 달라집니다. RDBMS 규칙은 다음을 준수하지 않을 경우에도 첫 번째 쿼리를 실행하고 데이터를 가져 오는 느린 것입니다.
그것은 모든 데이터와 테이블 간의 관계 매핑에 따라 달라집니다. RDBMS 규칙은 다음을 준수하지 않을 경우에도 첫 번째 쿼리를 실행하고 데이터를 가져 오는 느린 것입니다.
from https://stackoverflow.com/questions/14052596/subquery-v-s-inner-join-in-sql-server by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 어떻게 자바에서 SQL 테이블의 존재를 감지 할 수 있습니까? (0) | 2020.05.12 |
---|---|
[SQL] SQL이 아닌 단일 그룹의 그룹 기능 (0) | 2020.05.12 |
[SQL] 얼마나 많은 디스크 공간은 PostgreSQL의 DB를 사용하여 NULL 값을 저장하는 데 필요한? (0) | 2020.05.12 |
[SQL] SQL ORDER BY 날짜 문제 (0) | 2020.05.12 |
[SQL] PostgreSQL의에서 작은 따옴표와 큰 따옴표의 차이점은 무엇입니까? (0) | 2020.05.12 |