ÇAPRAZ UYGULAMAYI kullanmanın temel amacı nedir ?
Ben cross applybö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 APPLYsağ tablo olarak bir UDF gerektirmediğini de biliyorum .
Çoğu INNER JOINsorguda (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 APPLYdurumlarda ne zaman fark yarattığına dair iyi bir örnek verebilir INNER JOINmi?
Düzenle:
İcra planlarının tamamen aynı olduğu önemsiz bir örnek. (Bana nerede farklı olduklarını ve nerede cross applydaha 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 APPLYbir kümenin diğerine ( JOINoperatö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 Joinset gerçekleştirin , ki bu neredeyse hiçbir zaman setlere katılmanın en iyi yoludur. Bu nedenle, APPLYihtiyacınız olduğunda kullanın, ancak aşırı kullanmayın JOIN.
