最佳答案
使用交叉应用的主要目的是什么?
我读到过(模糊地,通过互联网上的帖子),如果您正在分区,那么cross apply
在选择大型数据集时更有效。(想到寻呼)
我还知道CROSS APPLY
不需要UDF作为右表。
在大多数INNER JOIN
查询(一对多关系)中,我可以重写它们以使用CROSS APPLY
,但它们总是给我相同的执行计划。
谁能给我举个好例子,说明在那些INNER JOIN
也能起作用的情况下,CROSS APPLY
会产生影响?
编辑:
这里有一个简单的例子,其中执行计划完全相同。(告诉我它们的不同之处,0号哪个更快/更有效)
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 Companyselect 'ABC Company', '19808' unionselect 'XYZ Company', '08534' unionselect '123 Company', '10016'
insert Personselect 'Alan', 1 unionselect 'Bobby', 1 unionselect 'Chris', 1 unionselect 'Xavier', 2 unionselect 'Yoshi', 2 unionselect 'Zambrano', 2 unionselect 'Player 1', 3 unionselect 'Player 2', 3 unionselect 'Player 3', 3
/* using CROSS APPLY */select *from Person pcross apply (select *from Company cwhere p.companyid = c.companyId) Czip
/* the equivalent query using INNER JOIN */select *from Person pinner join Company c on p.companyid = c.companyId