ÇAPRAZ UYGULAMAYI kullanmanın temel amacı nedir ?
Ben cross apply
bölümleme ise büyük veri kümeleri üzerinde seçim yaparken daha verimli olabilir (belirsiz, Internet posta yoluyla) okudum . (Sayfalama akla geliyor)
Ayrıca CROSS APPLY
sağ tablo olarak bir UDF gerektirmediğini de biliyorum .
Çoğu INNER JOIN
sorguda (bire çok ilişkiler), bunları kullanmak için yeniden yazabilirim CROSS APPLY
, ancak her zaman bana eşdeğer yürütme planları veriyorlar.
Biri işe yarayacağı CROSS APPLY
durumlarda ne zaman fark yarattığına dair iyi bir örnek verebilir INNER JOIN
mi?
Düzenle:
İcra planlarının tamamen aynı olduğu önemsiz bir örnek. (Bana nerede farklı olduklarını ve nerede cross apply
daha hızlı / daha verimli olduğunu gösterin )
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
bir kümenin diğerine ( JOIN
operatörün aksine ) bağımlı olmasına izin veren bariz kullanımı vardır , ancak bu bir maliyet olmadan gelmez: sol kümenin her üyesi üzerinde çalışan bir işlev gibi davranır , bu nedenle SQL Server terimleriyle her zaman bir Loop Join
set gerçekleştirin , ki bu neredeyse hiçbir zaman setlere katılmanın en iyi yoludur. Bu nedenle, APPLY
ihtiyacınız olduğunda kullanın, ancak aşırı kullanmayın JOIN
.