CROSS APPLY භාවිතා කිරීමේ ප්රධාන අරමුණ කුමක්ද?
cross applyඔබ කොටස් කර ඇත්නම් විශාල දත්ත කට්ටල තෝරාගැනීමේදී වඩාත් කාර්යක්ෂම විය හැකි (නොපැහැදිලි ලෙස, අන්තර්ජාලයේ පළ කිරීම් හරහා) මම කියවා ඇත්තෙමි . (පේජිං මතකයට එයි)
CROSS APPLYදකුණු වගුව ලෙස UDF අවශ්ය නොවන බව මම දනිමි .
බොහෝ 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
CROSS APPLYකට්ටලයක් තවත් එකක් මත යැපීමට ඉඩ දීමේදී එහි පැහැදිලි භාවිතයක් ඇත ( JOINක්රියාකරු මෙන් නොව ), නමුත් එය පිරිවැයකින් තොරව එන්නේ නැත: එය හැසිරෙන්නේ වම් කට්ටලයේ සෑම සාමාජිකයෙකුටම වඩා ක්රියාත්මක වන ශ්රිතයක් ලෙස ය , එබැවින් SQL සේවාදායකය අනුව එය සෑම විටම සිදු කරන්න Loop Join, එය කිසි විටෙකත් කට්ටලවලට සම්බන්ධ වීමට හොඳම ක්රමය නොවේ. එබැවින්, APPLYඔබට අවශ්ය විටදී භාවිතා කරන්න, නමුත් එය අධික ලෙස භාවිතා නොකරන්න JOIN.
