Какова основная цель использования CROSS APPLY?Когда следует использовать Cross Apply над Inner Join?
Я прочитал (смутно, через сообщения в Интернете), что cross apply
может быть более эффективным при выборе больших наборов данных, если вы занимаетесь секционированием. (Paging приходит на ум)
Я также знаю, что CROSS APPLY
doesn't require a UDF as the right-table.
В большинстве INNER JOIN
запросов (один-к-многим), я мог бы переписать их использовать CROSS APPLY
, но они всегда дают мне эквивалентные планы выполнения.
Может ли кто-нибудь дать мне хороший пример того, когда CROSS APPLY
имеет значение в тех случаях, когда INNER JOIN
будет работать?
Edit:
Вот тривиальный пример, где планы выполнения точно так же. (Покажите мне тот, где они отличаются и где 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
Я знаю, что это EVEN PICKIER, но «исполнитель» - это, безусловно, слово. Это не связано с эффективностью. – Rire1979
Это очень полезно для sql xquery. проверьте [это] (http://stackoverflow.com/a/10511719/474679). – ARZ
Похоже, что использование «соединения с внутренней петлей» было бы очень близко к кресту. Я хотел бы, чтобы ваш пример подробно указывал, что подсказка для соединения была эквивалентной. Просто сказать, что соединение может привести к внутреннему/циклу/слиянию или даже к «другому», потому что он может перестраиваться с другими объединениями. – crokusek