SQL: Hver er munurinn á tímabundinni töflu og undirfyrirspurn?


svara 1:

Tímabundin tafla er líkamlegt minni í minni og á harða disknum. Fyrirspurn er fyrirspurn. Það er nokkurn veginn munurinn. Hægt er að vísa til tímabundinnar töflu nokkrum sinnum í lotuferli vegna eðlisfræðilegrar eðlis þess innan lotunnar. Aðeins er hægt að vísa í undirfyrirspurn í fyrirspurninni. Auðvitað getur þú skrifað það margoft, en það verður að leysa það í hvert skipti sem það er skrifað. Þó tímabundna borðið sé verslun er það ekki endurskapað í hvert skipti sem þú vísar til þess.

Bað um að svara.


svara 2:

Tímabundin tafla er tafla sem byggir á núverandi fundi í minni (tímabundið). Eftir lotuna hverfur tímabundna taflan, svipuð algengri tjáningartöflu (CTE) sem notuð er til að ná árangri í minni (ekki varanleg).

Hugsaðu um undirfyrirspurn sem tvær fyrirspurnir settar saman til að ná árangri. Undirfyrirspurnir eru af tvennu tagi, samsvarandi undirfyrirspurn, þar sem ytri fyrirspurnin er háð innri fyrirspurninni, og ótengd undirfyrirspurn sem hægt er að keyra á báðum hlutum eða báðum hlutum undirfyrirspurnarinnar. Það fer eftir því hvar seinni hluti undirfyrirspurnarinnar er í ákvæðinu, þetta byggist á niðurstöðum.

Athugaðu að SELECT ákvæðið getur skilað mörgum röð niðurstöðum, FROM getur aðeins framkvæmt eina röð niðurstöðu og HVAR byggir á því að sía margar línur fyrir niðurstöður fyrir framleiðsla.

Ég myndi ekki mæla með því að keyra undirfyrirspurn nema þetta sé eina leiðin vegna þess að SQL Server er bjartsýni fyrir samskeyti, ekki fyrir undirfyrirspurnir og margar undirfyrirspurnir geta orðið sameiningar í staðinn, sem hraðar árangur. Temp-töflur eru frábærar þegar þú þarft ekki varanlega töflu til að safna gögnum til að birta niðurstöður.


svara 3:

Hægt er að spyrja um @ temp-töfluna / setja / uppfæra oft í T-SQL kóða (proc eða func). Undir hettunni er # temp tafla í tímabundnum gagnagrunni

Undirfyrirspurnir eru efemeral vs @ temp tafla. Frá sjónarhóli T-SQL er það bara yfirlýsingaskilyrði eða, frá gagnasjónarmiði, óbreytanlegt raðir.

Þú getur ekki sett / uppfært / eytt í undirspurninni, heldur í @ temp töflunni

Þú verður að nota CTE til að margfalda valið úr undirfyrirspurninni.