CROSS APPLY 사용의 주요 목적은 무엇입니까 ?
cross apply
파티셔닝하는 경우 대용량 데이터 세트를 선택할 때 더 효율적일 수있는 ( 인터넷의 게시물을 통해) 읽었습니다 . (페이징이 떠오른다)
또한 CROSS APPLY
UDF가 올바른 테이블로 필요하지 않다는 것을 알고 있습니다.
대부분의 INNER JOIN
쿼리 (일대 다 관계)에서을 사용하도록 다시 작성할 수는 CROSS APPLY
있지만 항상 동등한 실행 계획을 제공합니다.
누구든지 잘 작동 CROSS APPLY
하는 경우에 변화 를 가져올 때 좋은 예를 줄 수 있습니까 INNER JOIN
?
편집하다:
다음은 실행 계획이 정확히 동일한 간단한 예입니다. (서로 다른 곳 cross apply
과 더 빠르고 효율적인 곳을 보여주세요 )
create table Company (
companyId int identity(1,1)
, companyName varchar(100)
, zipcode varchar(10)
, constraint PK_Company primary key (companyId)
)
GO
create table Person (
personId int identity(1,1)
, personName varchar(100)
, companyId int
, constraint FK_Person_CompanyId foreign key (companyId) references dbo.Company(companyId)
, constraint PK_Person primary key (personId)
)
GO
insert Company
select 'ABC Company', '19808' union
select 'XYZ Company', '08534' union
select '123 Company', '10016'
insert Person
select 'Alan', 1 union
select 'Bobby', 1 union
select 'Chris', 1 union
select 'Xavier', 2 union
select 'Yoshi', 2 union
select 'Zambrano', 2 union
select 'Player 1', 3 union
select 'Player 2', 3 union
select 'Player 3', 3
/* using CROSS APPLY */
select *
from Person p
cross apply (
select *
from Company c
where p.companyid = c.companyId
) Czip
/* the equivalent query using INNER JOIN */
select *
from Person p
inner join Company c on p.companyid = c.companyId
CROSS APPLY
집합이 다른 JOIN
연산자 에 의존하도록 허용하는 명백한 사용법이 있지만 비용이 들지 않습니다. 왼쪽 집합 의 각 멤버에서 작동하는 함수처럼 작동 하므로 SQL Server 용어로 항상 Loop Join
집합을 결합하는 가장 좋은 방법은 아닙니다. 따라서 APPLY
필요할 때 사용 하지만 과도하게 사용하지 마십시오 JOIN
.