¿Cuándo debo usar la aplicación cruzada sobre la unión interna?

¿Cuál es el propósito principal de usarAplicar la cruz?

He leído (vagamente, a través de publicaciones en Internet) quecross apply puede ser más eficiente al seleccionar sobre grandes conjuntos de datos si está particionando. (La paginación viene a la mente)

Tambien se queCROSS APPLY no requiere un UDF como la tabla derecha.

En la mayoríaINNER JOIN consultas (relaciones uno a muchos), podría reescribirlas para usarlasCROSS APPLY, pero siempre me dan planes de ejecución equivalentes.

¿Puede alguien darme un buen ejemplo de cuándo?CROSS APPLY hace una diferencia en aquellos casos dondeINNER JOIN funcionará también?

Editar:

Aquí hay un ejemplo trivial, donde los planes de ejecución son exactamente los mismos. (Muéstrame uno donde difieren y dondecross apply es más rápido / más eficiente)

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

Respuestas a la pregunta(13)

Su respuesta a la pregunta