CROSS APPLYを使用する主な目的は何ですか?
cross apply
パーティションを作成している場合に大きなデータセットを選択するときに、より効率的になる可能性があることを(漠然と、インターネット上の投稿を通じて)読んだことがあります。(ページングが頭に浮かぶ)
CROSS APPLY
また、右のテーブルとしてUDFを必要としないことも知っています。
ほとんどのINNER JOIN
クエリ(1対多の関係)では、使用するように書き直すことができます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