使用CROSS APPLY的主要目的是什麼?什麼時候應該使用交叉套用內連接?
我已閱讀(隱約地通過互聯網上的帖子),如果您正在進行分區,在選擇大型數據集時cross apply
可以更高效。 (尋呼想到)
我也知道,CROSS APPLY
doesn't require a UDF as the right-table.
在大多數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
我知道這是我甚至PICKIER但'高性能'絕對是一個字。這與效率無關。 – Rire1979 2010-12-07 19:07:02
這對於sql xquery非常有用。檢查[this](http://stackoverflow.com/a/10511719/474679)。 – ARZ 2012-05-10 05:21:58
似乎使用「內部循環連接」將非常接近交叉應用。我希望你的例子詳細說明哪個連接提示是等價的。只是說連接可能會導致內部/循環/合併甚至「其他」,因爲它可能會與其他連接重新排列。 – crokusek 2012-06-09 05:58:22