CTE සහ තාවකාලික වගුව අතර වෙනස කුමක්ද?


179

පොදු වගු ප්‍රකාශනයක් (CTE) සහ තාවකාලික වගුවක් අතර වෙනස කුමක්ද? මම එකකට වඩා එකක් භාවිතා කළ යුත්තේ කවදාද?

සීටීඊ

WITH cte (Column1, Column2, Column3)
AS
(
    SELECT Column1, Column2, Column3
    FROM SomeTable
)

SELECT * FROM cte

තාවකාලික වගුව

SELECT Column1, Column2, Column3
INTO #tmpTable
FROM SomeTable

SELECT * FROM #tmpTable


Answers:


204

මෙය තරමක් පුළුල් ය, නමුත් මම ඔබට හැකි තරම් සාමාන්‍ය පිළිතුරක් දෙන්නෙමි.

සීටීඊ ...

  • වෙන් කළ නොහැකි (නමුත් යොමු කරන ලද වස්තූන් මත පවතින දර්ශක භාවිතා කළ හැකිය)
  • අවහිරතා තිබිය නොහැක
  • අත්‍යවශ්‍යයෙන්ම ඉවත දැමිය හැකි VIEW
  • දිගටම පවතින්නේ ඊළඟ විමසුම ක්‍රියාත්මක වන තුරු පමණි
  • පුනරාවර්තන විය හැකිය
  • කැපවූ සංඛ්‍යාලේඛන නොතිබෙන්න (යටින් පවතින වස්තූන් මත සංඛ්‍යාලේඛන මත රඳා සිටින්න)

# ටෙම්ප් වගු ...

  • තාවකාලික ද්‍රව්‍යවල පවතින සත්‍ය ද්‍රව්‍යමය වගු වේ
  • සුචිගත කළ හැකිය
  • අවහිරතා තිබිය හැකිය
  • වත්මන් සම්බන්ධතාවයේ ජීවිතය සඳහා දිගටම සිටින්න
  • වෙනත් විමසුම් හෝ උප ක්‍රියා පටිපාටි මගින් යොමු කළ හැකිය
  • එන්ජිම මඟින් ජනනය කරන ලද සංඛ්‍යාලේඛන තබා ගන්න

සෑම එකක්ම භාවිතා කළ යුතු තාක් දුරට, ඒවාට වඩා වෙනස් භාවිත අවස්ථා තිබේ. ඔබට ඉතා විශාල ප්‍රති result ල කට්ටලයක් තිබේ නම් හෝ එක් වරකට වඩා එය යොමු කිරීමට අවශ්‍ය නම් එය #tempවගුවක තබන්න. එය පුනරාවර්තනය වීමට, ඉවත දැමිය හැකි හෝ තර්කානුකූලව යමක් සරල කිරීමට අවශ්‍ය CTEනම්, වඩාත් කැමති වේ.

එසේම, CTEකළ යුතු කාර්ය සාධනය සඳහා භාවිතා කල යුතු නැහැ . CTE භාවිතා කිරීමෙන් ඔබ කිසි විටෙකත් දේවල් වේගවත් නොකරනු ඇත, මන්ද, නැවතත්, එය ඉවත දැමිය හැකි දර්ශනයක් පමණි. ඔබට ඔවුන් සමඟ පිළිවෙලට දේවල් කළ හැකි නමුත් විමසුමක් වේගවත් කිරීම ඇත්තෙන්ම ඒවායින් එකක් නොවේ.


CTE භාවිතා කරමින් විශාල මර්ජ් වේගවත් කිරීම කාරණයකි
AgentFire

2
CTE භාවිතා කරමින් බොහෝ විමසුම් වේගවත් කිරීම ද කාරණයකි, මන්ද CTE සමඟ ඔබට විමසුම් ප්‍රශස්තකරණය අභිබවා යාමට ඔබේම ව්‍යාපාර දැනුමක් එක් කළ හැකිය. නිදසුනක් ලෙස, ඔබේ CTE හි 1 වන කොටස වගු වලින් තෝරා ගත හැකි අතර එහි ප්‍රති ing ලයක් ලෙස ඇති පේළි ඉතා කුඩා වනු ඇත. එකම විමසුම තුළම, ඔබට මෙම කුඩා ප්‍රති results ලයට වඩා විශාල ප්‍රති results ල කට්ටලයකට සම්බන්ධ විය හැකි අතර පරණ සංඛ්‍යාලේඛන නිසා ඇති වන ගැටළු මුළුමනින්ම මග හැරිය හැක. මෙය සිදු කිරීම සඳහා, ඇණවුම බල කිරීම සඳහා විමසුම් ඉඟි එකතු කළ යුතුය. එය ක්රියා කරයි, එය කාර්ය සාධනය වැඩි දියුණු කරයි.
ඩේව් හිල්ඩිච්

"කිසි විටෙකත් කාර්ය සාධනය සඳහා භාවිතා නොකරන්න" යනු ඔබේ අදහස මට වැටහී ගියත් පුළුල් හා තරමක් ආත්මීය ප්‍රකාශයකි. අනෙක් අදහස් වලට අමතරව, පුනරාවර්තන ක්‍රියා පටිපාටි ඇමතුම් හෝ කර්සරය වැනි වෙනත් පුනරාවර්තන ක්‍රමයකින් පුනරාවර්තන සීටීඊ වෙත මාරුවීමේදී සීටීඊ භාවිතා කිරීමෙන් තවත් විභව කාර්ය සාධනයක් ලබා ගත හැකිය.
ජේ ඩී

29

සංස්කරණය කරන්න:

කරුණාකර පහත මාටින්ගේ අදහස් බලන්න:

CTE මතකයේ වගුවක් ලෙස ක්‍රියාත්මක නොවේ. එය විමසුම් අර්ථ දැක්වීමක් ඇතුළත් කිරීමේ ක්‍රමයක් පමණි. OP සම්බන්ධයෙන් ගත් කල එය පේළිගත වන අතර එය සිදු කිරීම හා සමාන SELECT Column1, Column2, Column3 FROM SomeTableවේ. බොහෝ විට ඔවුන් ඉදිරියෙන් ද්‍රව්‍යමය ලෙස ක්‍රියා නොකරයි WITH T(X) AS (SELECT NEWID())SELECT * FROM T T1 JOIN T T2 ON T1.X=T2.X, මේ නිසා පේළි කිසිවක් නොලැබේ , ක්‍රියාත්මක කිරීමේ සැලසුම් ද පරීක්ෂා කරන්න. සමහර විට ස්පූල් එකක් ලබා ගැනීමේ සැලසුම හැක් කළ හැකිය. මේ සඳහා ඉඟියක් ඉල්ලා සිටින සම්බන්ධක අයිතමයක් තිබේ. - මාටින් ස්මිත් පෙබරවාරි 15 ​​'12 ට 17:08


මුල් පිළිතුර

සීටීඊ

MSDN පිළිබඳ වැඩිදුර කියවන්න

CTE විසින් මතකය භාවිතා කරන වගුව නිර්මාණය කරයි, නමුත් එය වලංගු වන්නේ එය අනුගමනය කරන නිශ්චිත විමසුම සඳහා පමණි. පුනරාවර්තනය භාවිතා කරන විට, මෙය structure ලදායී ව්යුහයක් විය හැකිය.

ඔබට වගු විචල්‍යයක් භාවිතා කිරීම ගැන සලකා බැලීමට අවශ්‍ය විය හැකිය. මෙම භාවිතා ලෙස එය තාවකාලික වගුව භාවිතා සහ එක් එක් එක්වන සඳහා නැවත වෙස් වීමට යාමකින් තොරව වාර කිහිපයක් භාවිතා කළ හැක. එසේම, ඔබට දැන් වාර්තා කිහිපයක් දිගටම පවත්වා ගැනීමට අවශ්‍ය නම්, ඊළඟ තේරීමෙන් පසු තවත් වාර්තා කිහිපයක් එක් කරන්න, තවත් ප්‍රකාශයකින් පසුව තවත් වාර්තා කිහිපයක් එක් කරන්න, ඉන්පසු එම වාර්තා අතලොස්සක් ආපසු එවන්න, එවිට මෙය පහසු ව්‍යුහයක් විය හැකිය. ක්‍රියාත්මක කිරීමෙන් පසු අතහැර දැමිය යුතු නැත. බොහෝ විට සින්ටැක්ටික් සීනි. කෙසේ වෙතත්, ඔබ පේළි ගණන අඩු මට්ටමක තබා ගන්නේ නම්, එය කිසි විටෙකත් තැටියට ක්‍රියාත්මක නොවේ. බලන්න SQL සේවාදායකයේ තාවකාලික වගුවක් සහ වගු විචල්‍යය අතර වෙනස කුමක්ද? වැඩි විස්තර සඳහා.

තාවකාලික වගුව

MSDN පිළිබඳ වැඩිදුර කියවන්න - මාර්ගයෙන් 40% ක් පමණ පහළට අනුචලනය කරන්න

තාවකාලික වගුවක් යනු වචනාර්ථයෙන් තැටියේ සාදන ලද වගුවකි, මකා දැමිය හැකි බව කවුරුත් දන්නා නිශ්චිත දත්ත ගබඩාවක. එම වගු තවදුරටත් අවශ්‍ය නොවන විට විනාශ කිරීම හොඳ දේවාලයක වගකීම වන නමුත් DBA හට ඒවා අතුගා දැමිය හැකිය.

තාවකාලික වගු වර්ග දෙකකින් යුක්ත වේ: දේශීය සහ ගෝලීය. MS SQL සේවාදායකය අනුව, ඔබ #tableNameදේශීය ##tableNameසඳහා තනතුරක් සහ ගෝලීය නම් කිරීම භාවිතා කරයි (හඳුනාගැනීමේ ලක්ෂණය ලෙස තනි හෝ ද්විත්ව # භාවිතා කිරීම සැලකිල්ලට ගන්න).

තාවකාලික වගු සමඟ, වගු විචල්‍යයන්ට හෝ සීටීඊයට ප්‍රතිවිරුද්ධව, ඔබට සුචිය සහ ඒ හා සමාන දෑ යෙදිය හැකි බව සලකන්න, මේවා වචනයේ සාමාන්‍ය අර්ථයෙන් නීත්‍යානුකූලව වගු වේ.


සාමාන්‍යයෙන් මම දිගු හෝ විශාල විමසුම් සඳහා තාවකාලික වගු භාවිතා කරමි, සහ මා සතුව දැනටමත් කුඩා දත්ත කට්ටලයක් තිබේ නම් සහ සීටීඊ හෝ වගු විචල්‍යයන් කුඩා දෙයක් සඳහා කේත ටිකක් ඉක්මනින් ස්ක්‍රිප්ට් කිරීමට අවශ්‍ය නම්. පළපුරුද්ද සහ අන් අයගේ උපදෙස් වලින් ඇඟවෙන්නේ ඔබ පේළි කුඩා සංඛ්‍යාවක් ඇති CTEs භාවිතා කළ යුතු බවයි. ඔබට විශාල සංඛ්‍යාවක් තිබේ නම්, තාවකාලික වගුවේ සුචිගත කිරීමේ හැකියාව ඔබට බොහෝ විට ප්‍රයෝජනවත් වනු ඇත.


11
CTE මතකයේ වගුවක් ලෙස ක්‍රියාත්මක නොවේ. එය විමසුම් අර්ථ දැක්වීමක් ඇතුළත් කිරීමේ ක්‍රමයක් පමණි. OP සම්බන්ධයෙන් ගත් කල එය නැඹුරු වන අතර එය සිදු කිරීමම වේSELECT Column1, Column2, Column3 FROM SomeTable
මාටින් ස්මිත්

4
බොහෝ විට ඔවුන් ඉදිරියෙන් ද්‍රව්‍යමය ලෙස ක්‍රියා නොකරයි WITH T(X) AS (SELECT NEWID())SELECT * FROM T T1 JOIN T T2 ON T1.X=T2.X, මේ නිසා පේළි කිසිවක් නොලැබේ , ක්‍රියාත්මක කිරීමේ සැලසුම් ද පරීක්ෂා කරන්න. සමහර විට ස්පූල් එකක් ලබා ගැනීමේ සැලසුම හැක් කළ හැකිය. ඒ නිසා එය සම්බන්ධ කිරීම අයිතමය මේ සඳහා ඉඟියක් ලෙස ඉල්ලා.
මාටින් ස්මිත්

17

මෙහි පිළිගත් පිළිතුර පවසන්නේ "CTE කිසි විටෙකත් කාර්ය සාධනය සඳහා භාවිතා නොකළ යුතුය" - නමුත් එය නොමඟ යැවිය හැකිය. සීටීඊ හා එදිරිව තාවකාලික වගු වල සන්දර්භය තුළ, මම ගබඩා කර ඇති මුක්කු කට්ටලයකින් කුණු කූඩයක් ඉවත් කිරීම අවසන් කර ඇත්තෙමි. ක්‍රියාවලිය පුරාම නීත්‍යානුකූලව නැවත භාවිතා කිරීමට යන ඒවා හැරෙන්නට මම කැබලි අක්ෂර CTE වෙත ගෙන ගියෙමි . සියලුම ප්‍රමිතික අනුව මම 20% ක කාර්ය සාධනයක් ලබා ගතිමි. පුනරාවර්තන සැකසුම් ක්‍රියාත්මක කිරීමට උත්සාහ කරන සියලුම කර්සර ඉවත් කිරීමට මම පසුව කටයුතු කළෙමි. විශාලතම වාසිය මා දුටු ස්ථානය මෙයයි. මම ප්‍රතිචාර වේලාවන් දහයකින් අඩු කළා.

CTEs සහ තාවකාලික වගු වලට වඩා වෙනස් භාවිත අවස්ථා තිබේ. මට අවධාරණය කිරීමට අවශ්‍ය වන්නේ, කෝකටත් තෛලයක් නොවුවද, CTEs අවබෝධ කර ගැනීම සහ නිවැරදිව භාවිතා කිරීම කේතයේ ගුණාත්මකභාවය / නඩත්තු කිරීමේ හැකියාව සහ වේගය යන දෙකෙහිම සැබවින්ම තාරකා වැඩිදියුණු කිරීමට හේතු විය හැකි බවයි. මට ඒවා හසුරුවන බැවින්, තාවකාලික වගු සහ කර්සරය SQL සැකසීමේ මහා නපුර ලෙස මම දකිමි. මට දැන් සෑම දෙයක්ම පාහේ මේස විචල්‍යයන් සහ සීටීඊ සමඟ හොඳින් ලබා ගත හැකිය. මගේ කේතය පිරිසිදු හා වේගවත් ය.


දැන්, අපි සාධාරණ වෙමු - කර්සරය යනු මහා නපුරයි ; තාවකාලික වගු නරකම ලෙස අඩු නපුරකි. :-) ඔබ ඔබම දුටු ආකාරයටම ඒවා එකම මට්ටමක තැබීම ඇත්තෙන්ම අසාධාරණයි.
RDFozz

DRDFozz හරි, අප කවුරුත් දන්නා පරිදි නිරයට රවුම් 9 ක් ඇත . තාවකාලික වගු 2 වන ස්ථානයටත් කර්සරය ... 7 වන ස්ථානයටත් තබමු. ;)
ypercubeᵀᴹ

1
ක්‍රමලේඛනයේ ඇති 'මහා නපුර' යනු කුමක්දැයි ඔබ දන්නවාද? විශේෂිත තාක්ෂණයක් නපුරු යැයි මිනිසුන් පවසන විට. කර්සර සඳහා ස්ථානයක් තිබේ. ඇතැම් අවස්ථාවන්හිදී ඔවුන්ට වෙනත් ශිල්පීය ක්‍රම අභිබවා යා හැකිය. මෙහි කිසිදු නපුරක් නොමැත - කාර්යය සඳහා නිවැරදි මෙවලම භාවිතා කිරීමට ඔබ ඉගෙන ගත යුතුය. ඔබ කරන්නේ කුමක්දැයි මැන බලන්න, CTE, Temp Table හෝ Cursors නපුරු යැයි උපකල්පනය නොකරන්න. මැනීම - සත්‍යය රඳා පවතින්නේ තත්වය මත ය.
ඩේව් හිල්ඩිච්

Ave ඩේව්හිල්ඩිච් එය සාධාරණ අදහස් දැක්වීමකි, නමුත් බොහෝ අවස්ථාවන්හිදී කර්සරය නිවැරදි විසඳුම නොවන බව ප්‍රකාශ කිරීම ද සාධාරණ ප්‍රකාශයකි, එබැවින් ඒවා ලබා ගැනීම ක්‍රියාකාරී සාමාන්‍යකරණයකි.
මෙල් පැඩන්

1
මගේ අත්දැකීම් අනුව, කර්සරය තමා තුළම නරක නැත. CURSORS සාමාන්‍යයෙන් සංවර්ධකයින් විසින් "වැරදි ලෙස" භාවිතා කරනු ලැබේ, මන්ද බොහෝ ක්‍රමලේඛන භාෂාවලදී, ඔබ බොහෝ විට කණ්ඩායම් වශයෙන් සිතිය යුතු SQL වලට වඩා වෙනස්ව සිතිය යුතුය. මගේ සේවා ස්ථානයේ මෙය පොදු වැරැද්දක් බව මම දනිමි, දේව්ස්ට කර්සරය හැර වෙනත් ගැටලුවකින් මිදීමට මාර්ගයක් නොපෙනේ, එබැවින් ඒවා ඉගැන්වීමට හා නිවැරදි කිරීමට හොඳ ඩී.බී.ඒ. Ave ඩේව්හිල්ඩිච් මුළුමනින්ම නිවැරදියි: නිවැරදි රැකියාව සඳහා නිවැරදි මෙවලම අවශ්‍ය වන්නේ එයයි.
පිලිප්

14

විමසුමක් තුළ CTE නැවත නැවත කැඳවිය හැකි අතර එය යොමු කරන සෑම අවස්ථාවකම ඇගයීමට ලක් කෙරේ - මෙම ක්‍රියාවලිය පුනරාවර්තන විය හැකිය. CTEs පරාමිතිකරණය කළ හැකි වුවද එය එක් වරක් පමණක් යොමු කළ හොත් එය උප විමසුමකට සමාන ය.

තාවකාලික වගුවක් භෞතිකව නොනැසී පවතින අතර එය සුචිගත කළ හැකිය. ප්‍රායෝගිකව විමසුම් ප්‍රශස්තිකරුවා ස්පූල් මෙහෙයුම් වැනි තිරය පිටුපස අතරමැදි බැඳීම් හෝ උප විමසුම් ප්‍රති results ල දිගටම පැවතිය හැකිය, එබැවින් CTE වල ප්‍රති results ල කිසි විටෙකත් තැටියට නොපවතින බව තදින්ම සත්‍ය නොවේ.

IIRC වගු විචල්‍යයන් (අනෙක් අතට) සැමවිටම මතකයේ ව්‍යුහයන් වේ.


4
CTEs පරාමිතිකරණය කළ හැකිද? කොහොමද? එසේම, වගු විචල්යයන් සැමවිටම මතකයේ ව්යුහයන් නොවේ. ආශ්‍රිත ප්‍රශ්නයකට මාටින් දුන් විශිෂ්ට පිළිතුර බලන්න .
පෝල් වයිට් 9

11

තාවකාලික වගුව යනු tempdb හි සැබෑ වස්තුවකි, නමුත් cte යනු එක් පියවරක් තුළ සංවිධානාත්මක පුනරාවර්තනයේ වාක්‍ය ඛණ්ඩය සරල කිරීම සඳහා සංකීර්ණ විමසුමක් වටා එතීමකි.


8

CTEs භාවිතා කිරීමට මූලික හේතුව වන්නේ කවුළු කාර්යයන් row_number()සහ වෙනත් විවිධ දේ වෙත ප්‍රවේශ වීමයි.

මෙයින් අදහස් කරන්නේ ඔබට එක් කණ්ඩායමකට පළමු හෝ අවසාන පේළිය ඉතා ඉක්මණින් හා කාර්යක්ෂමව ලබා ගැනීම වැනි දේවල් කළ හැකි බවයි - බොහෝ ප්‍රායෝගික අවස්ථාවන්හිදී වෙනත් ක්‍රමවලට වඩා කාර්යක්ෂමව .

with reallyfastcte as (
select *, 
row_number() over (partition by groupingcolumn order by sortingcolumn) as rownum
from sometable
)
select *
from reallyfastcte
where rownum = 1;

සහසම්බන්ධිත උපවිශේෂයක් භාවිතා කිරීමෙන් හෝ උප විමසුමක් භාවිතා කිරීමෙන් ඔබට ඉහත විමසුමට සමාන විමසුමක් ක්‍රියාත්මක කළ හැකි නමුත් CTE සෑම අවස්ථාවකම පාහේ වේගවත් වනු ඇත.

මීට අමතරව, ඔබේ කේතය සරල කිරීමට CTE වලට සැබවින්ම උදව් කළ හැකිය. මෙය ඔබ කාර්ය සාධනය වැඩි කර ගැනීමට හේතු විය හැකි නිසා ඔබ විමසුම වැඩිපුර වටහාගෙන ඇති අතර ප්‍රශස්තකරණය වඩාත් තෝරා බේරා ගැනීමට උපකාරී වන පරිදි තවත් ව්‍යාපාර තර්කනයන් හඳුන්වා දිය හැකිය.

මීට අමතරව, CTEs ඔබ ඔබේ ව්යාපාරය තර්කනය සහ දැනුම තේරුම් නම් විමසුම කොටස් පළමු ක්රියාත්මක කළ යුතු, කාර්ය සාධනය ඉහළ නැංවීමට හැකි - සාමාන්යයෙන්, ඔවුන්ගේ ඊළඟ එක්වන එකතු දී දර්ශකය භාවිතා කල හැකි බව කට්ටල සිදු කිරීමට පෙරමුණ බව ප්රථමයෙන් ඔබේ බොහෝ වරණාත්මක විමසුම් ය option(force order)විමසුම ඉඟිය

අවසාන වශයෙන්, CTEs පෙරනිමියෙන් tempdb භාවිතා නොකරන බැවින් ඒවායේ භාවිතය හරහා එම බාධකය පිළිබඳ මතභේදය අඩු කරයි.

ඔබට දත්ත කිහිප වතාවක් විමසීමට අවශ්‍ය නම් තාවකාලික වගු භාවිතා කළ යුතුය, නැතහොත් විකල්පයක් ලෙස ඔබ ඔබේ විමසීම් මැන බලා තාවකාලික වගුවකට ඇතුළු කිරීමෙන් සහ ඔබේ කාර්ය සාධනය වැඩි දියුණු කරන ලද දර්ශකයක් එකතු කිරීමෙන් එය සොයා ගත හැකිය.


සියලු හොඳ කරුණු ... +1
මෙල් පැඩන්

6

CTE හි මෙහි යම් නිෂේධාත්මක බවක් ඇති බව පෙනේ.

සීටීඊ පිළිබඳ මගේ අවබෝධය නම් එය මූලික වශයෙන් එක්තරා ආකාරයක දෘෂ්ටියක් බවයි. SQL යනු ප්‍රකාශන සහ කට්ටල පදනම් කරගත් භාෂාවකි. CTE යනු කට්ටලයක් ප්‍රකාශ කිරීමේ විශිෂ්ට ක්‍රමයකි! ඔබට අවශ්‍ය නොවන නිසා CTE සුචිගත කිරීමට නොහැකි වීම ඇත්තෙන්ම හොඳ දෙයකි! විමසුම කියවීමට / ලිවීමට පහසු කිරීම සඳහා එය සැබවින්ම සින්ටැක්ටික් සීනි වර්ගයකි. ඕනෑම යහපත් ප්‍රශස්තිකරණයක් යටින් ඇති වගු වල දර්ශක භාවිතා කරමින් හොඳම ප්‍රවේශ සැලැස්ම සකස් කරනු ඇත. මෙයින් අදහස් කරන්නේ යටින් ඇති වගු පිළිබඳ දර්ශක උපදෙස් අනුගමනය කිරීමෙන් ඔබේ CTE විමසුම effectively ලදායී ලෙස වේගවත් කළ හැකි බවයි.

එසේම, ඔබ කට්ටලයක් CTE ලෙස අර්ථ දැක්වූ පමණින්, කට්ටලයේ සියලුම පේළි සැකසිය යුතු යැයි එයින් අදහස් නොවේ. විමසුම මත පදනම්ව ප්‍රශස්තකරණය මඟින් විමසුම තෘප්තිමත් කිරීම සඳහා "ප්‍රමාණවත්" පේළි සැකසිය හැක. සමහර විට ඔබට අවශ්‍ය වූයේ ඔබේ තිරය සඳහා පළමු 20 හෝ ඊට වැඩි ගණනක් පමණි. ඔබ තාවකාලික වගුවක් සාදා ඇත්නම් ඔබට එම පේළි සියල්ලම කියවීමට / ලිවීමට අවශ්‍යය!

මේ මත පදනම්ව මම කියන්නේ CTE හි SQL හි විශිෂ්ට ලක්‍ෂණයක් වන අතර ඒවා ඕනෑම තැනක භාවිතා කර විමසුම කියවීමට පහසු කරවයි. මම සිතන්නේ සෑම වාර්තාවක්ම සැකසීමට අවශ්‍ය වන කණ්ඩායම් ක්‍රියාවලියක් සඳහා තාවකාලික වගුවක් ගැන පමණි. තාවකාලික වගුවක හැඹිලි සහ දර්ශක සඳහා දත්ත සමුදායට ඔබට උදව් කිරීම දුෂ්කර බැවින් එය එසේ නිර්දේශ නොකරයි. ඔබේ ගනුදෙනුවට අනන්‍ය වූ PK ක්ෂේත්‍රයක් සහිත ස්ථිර වගුවක් තිබීම වඩා හොඳ විය හැකිය.

මගේ අත්දැකීම් ප්‍රධාන වශයෙන් ඩීබී 2 සමඟ ඇති බව පිළිගත යුතුය. එබැවින් මම සිතන්නේ නිෂ්පාදන දෙකෙහිම සීටීඊයේ ක්‍රියාකාරිත්වය සමාන ආකාරයකින් ක්‍රියාත්මක වන බවයි. CTE හි SQL සේවාදායකයේ යම් ආකාරයකින් පහත් මට්ටමක සිටී නම් මම සතුටින් නිවැරදි කරමි. ;)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.