Ngaphambili
Kule nqaku, ndiza kubonisa indlela le ngcamango ikuvumela ukuba ubhale ngokukhawuleza kwaye ulungelelanise ubhala kwaye ufunde kwi-database ngaphandle kotshintsho kwi-logic yokusebenza. Ukusebenza okufanayo kuye kwazanywa ukuba kuphunyezwe kwii-DBMS zentengiso zanamhlanje (ngokukodwa, i-Oracle kunye ne-Microsoft SQL Server). Ekupheleni kwenqaku ndiza kubonisa ukuba oko bakwenzileyo, ukuyibeka kakuhle, akuzange kusebenze kakuhle.
inkcazelo
Njengangaphambili, ukuqonda ngcono ndiya kuqala inkcazo ngemizekelo. Masithi kufuneka siphumeze ingqiqo eya kubuyisela uluhlu lwamasebe anenani labasebenzi kuwo kunye nomvuzo wabo uwonke.
Kwisiseko sedatha esisebenzayo kuya kujongeka ngolu hlobo:
CLASS Department ‘Отдел’;
name ‘Наименование’ = DATA STRING[100] (Department);
CLASS Employee ‘Сотрудник’;
department ‘Отдел’ = DATA Department (Employee);
salary ‘Зарплата’ = DATA NUMERIC[10,2] (Employee);
countEmployees ‘Кол-во сотрудников’ (Department d) =
GROUP SUM 1 IF department(Employee e) = d;
salarySum ‘Суммарная зарплата’ (Department d) =
GROUP SUM salary(Employee e) IF department(e) = d;
SELECT name(Department d), countEmployees(d), salarySum(d);
Ubunzima bokwenza lo mbuzo kuyo nayiphi na i-DBMS buyakulingana O(inani labasebenzi)kuba olu balo lufuna ukuskena itheyibhile yonke yabasebenzi kwaye emva koko babekwe ngokwamaqela ngokwesebe. Kuya kubakho nabanye abancinci (sikholelwa ukuba baninzi abasebenzi abangaphezu kwamasebe) abongezelelekileyo ngokuxhomekeke kwisicwangciso esikhethiweyo O(inombolo yabasebenzi) okanye O(inani lamasebe) ukulungiselela amaqela kunye nokunye.
Kucacile ukuba i-overhead yokubulawa ingahluka kwii-DBMS ezahlukeneyo, kodwa ubunzima abuyi kutshintsha nangayiphi na indlela.
Kuphunyezo olucetywayo, i-DBMS esebenzayo iya kuvelisa i-subquery enye eya kubala amaxabiso afunekayo kwisebe, kwaye emva koko yenza i-JOIN kunye netafile yesebe ukufumana igama. Nangona kunjalo, kumsebenzi ngamnye, xa ubhengeza, kunokwenzeka ukuseta uphawu olukhethekileyo lwe-MATERIALIZED. Inkqubo iya kudala ngokuzenzekela indawo ehambelanayo yomsebenzi ngamnye onjalo. Xa utshintsha ixabiso lomsebenzi, ixabiso lentsimi liya kutshintsha kwakhona kwintengiselwano efanayo. Xa ufikelela kulo msebenzi, indawo ebalwe kwangaphambili iyakufikelelwa.
Ngokukodwa, ukuba umisela i-MATERIALIZED yemisebenzi count Abasebenzi и umvuzoSum, ngoko ke amabala amabini aya kongezwa kwitheyibhile noluhlu lwamasebe, aya kugcina inani labasebenzi kunye nomvuzo wabo uwonke. Nanini na xa kukho utshintsho kubasebenzi, imivuzo yabo okanye ukunxulumana nesebe, inkqubo iya kutshintsha ngokuzenzekelayo amaxabiso ala macandelo. Lo mbuzo ungentla uza kufikelela kule mimandla ngokuthe ngqo kwaye iya kuphunyezwa kuyo O(inani lamasebe).
Ziziphi izithintelo? Inye kuphela into: umsebenzi onje kufuneka ube nenani eliqingqiweyo lamaxabiso egalelo apho ixabiso lawo lichazwe khona. Ngaphandle koko, kuya kuba nzima ukwakha itafile egcina onke amaxabiso ayo, kuba ayinakuba netafile enenani elingapheliyo lemiqolo.
Umzekelo:
employeesCount ‘Количество сотрудников с зарплатой > N’ (Department d, NUMERIC[10,2] N) =
GROUP SUM salary(Employee e) IF department(e) = d AND salary(e) > N;
Lo msebenzi uchazwe kwinani elingenasiphelo lamaxabiso e-N (umzekelo, naliphi na ixabiso elingalunganga lifanelekile). Ke ngoko, awukwazi ukubeka i-MATERIALIZED kuyo. Ke lo ngumda osengqiqweni, hayi owobugcisa (oko kukuthi, hayi kuba singenako ukuwuphumeza). Ngaphandle koko, akukho zithintelo. Ungasebenzisa amaqela, ukuhlela, KUNYE kunye OKANYE, UKWAHLUKANA, ukuphindaphinda, njl.
Umzekelo, kwingxaki 2.2 yenqaku elidlulileyo, unokubeka i-MATERIALIZED kuyo yomibini imisebenzi:
bought 'Купил' (Customer c, Product p, INTEGER y) =
GROUP SUM sum(Detail d) IF
customer(order(d)) = c AND
product(d) = p AND
extractYear(date(order(d))) = y MATERIALIZED;
rating 'Рейтинг' (Customer c, Product p, INTEGER y) =
PARTITION SUM 1 ORDER DESC bought(c, p, y), p BY c, y MATERIALIZED;
SELECT contactName(Customer c), name(Product p) WHERE rating(c, p, 1997) < 3;
Inkqubo ngokwayo iya kudala itafile enye kunye nezitshixo zohlobo umthengi, imveliso и NGAPHAKATHI, iyakongeza imihlaba emibini kuyo kwaye iya kuhlaziya amaxabiso entsimi kuwo naluphi na utshintsho. Xa ezinye iifowuni zenziwa kule misebenzi, aziyi kubalwa, kodwa amaxabiso aya kufundwa kwiindawo ezihambelanayo.
Ukusebenzisa le ndlela, ungenza, umzekelo, ukulahla i-recursions (CTE) kwimibuzo. Ngokukodwa, qwalasela amaqela enza umthi esebenzisa ubudlelwane bomntwana/nomzali (iqela ngalinye linekhonkco kumzali walo):
parent = DATA Group (Group);
Kwisiseko sedatha esisebenzayo, i-recursion logic ingachazwa ngolu hlobo lulandelayo:
level (Group child, Group parent) = RECURSION 1l IF child IS Group AND parent == child
STEP 2l IF parent == parent($parent);
isParent (Group child, Group parent) = TRUE IF level(child, parent) MATERIALIZED;
Ukususela kumsebenzi nguMzali iphawulwe MATERIALIZED, ngoko itafile enezitshixo ezibini (amaqela) izakuyenzelwa yona, apho umhlaba nguMzali iya kuba yinyani kuphela ukuba isitshixo sokuqala ngumntwana wesibini. Inani lamangenelo kule theyibhile liyakulingana nenani lamaqela aphindaphindwe ngomyinge wobunzulu bomthi. Ukuba ufuna, umzekelo, ukubala inani lenzala yeqela elithile, ungasebenzisa lo msebenzi:
childrenCount (Group g) = GROUP SUM 1 IF isParent(Group child, g);
Akuyi kubakho CTE kumbuzo weSQL. Endaweni yoko kuzakubakho iQELA elilula BY.
Usebenzisa olu matshini, unokwenza ngokulula ukuba isiseko sedatha singabi sisiqhelo xa kuyimfuneko:
CLASS Order 'Заказ';
date 'Дата' = DATA DATE (Order);
CLASS OrderDetail 'Строка заказа';
order 'Заказ' = DATA Order (OrderDetail);
date 'Дата' (OrderDetail d) = date(order(d)) MATERIALIZED INDEXED;
Xa ufowunela umsebenzi Umhla kumgca womyalelo, intsimi apho kukho isalathisi iya kufundwa kwitheyibhile ngemigca yomyalelo. Xa usuku lokuodola lutshintsha, inkqubo ngokwayo iya kubala ngokuzenzekelayo umhla owenziwe uhlengahlengiso kumgca.
iingenelo
Yenzelwe ntoni le ndlela yonke? Kwii-DBMS zakudala, ngaphandle kwemibuzo yokubhala kwakhona, umphuhlisi okanye i-DBA inokutshintsha kuphela izalathisi, imisele amanani kwaye uxelele umcwangcisi wombuzo ukuba ayenze njani (kunye neeHINTs zifumaneka kuphela kwii-DBMS zorhwebo). Nokuba bazama kangakanani na, abayi kuba nako ukugqiba umbuzo wokuqala kwinqaku kwi O (inani lamasebe) ngaphandle kokutshintsha imibuzo okanye ukongeza izichukumisi. Kwiskimu esicetywayo, kwinqanaba lophuhliso akufanele ucinge malunga nesakhiwo sokugcinwa kwedatha kunye nokuba yeyiphi i-aggregations yokusebenzisa. Konke oku kunokutshintshwa ngokulula kwi-fly, ngokuthe ngqo ekusebenzeni.
Ngokwenza oko kubonakala ngathi. Abanye abantu baphuhlisa ingqiqo ngokuthe ngqo ngokusekelwe kumsebenzi okhoyo. Abaziqondi ii-algorithms kunye nobunzima bazo, okanye izicwangciso zokuphumeza, okanye iintlobo zokujoyina, okanye nayiphi na enye icandelo lobugcisa. Aba bantu ngabahlalutyi bezoshishino ngaphezu kwabaphuhlisi. Emva koko, konke oku kuya kuvavanyo okanye ukusebenza. Ivumela ukuloga kwemibuzo yexesha elide. Xa umbuzo omde uchongiwe, ngoko ke abanye abantu (ubuchwephesha obungakumbi - ngokusisiseko i-DBA) bathatha isigqibo sokuvumela i-MATERIALIZED kumsebenzi othile ophakathi. Oku kunciphisa ukurekhoda kancinci (ekubeni kufuna ukuhlaziya intsimi eyongezelelweyo kwintengiselwano). Nangona kunjalo, ayisiyiwo lo mbuzo kuphela okhawuleziswa ngokukhawuleza, kodwa nabo bonke abanye abasebenzisa lo msebenzi. Kwangaxeshanye, ukugqiba ukuba ngowuphi umsebenzi oza kuwenza akulula. Iiparamitha ezimbini eziphambili: inani lamaxabiso akhoyo (oku kukuba zingaphi iirekhodi eziya kuba kwitafile ehambelanayo), kwaye isetyenziswa kangaphi kweminye imisebenzi.
Analogs
Ii-DBMS zentengiso zanamhlanje zineendlela ezifanayo: UKUBONWA KWEMATERIALIZED nge-FAST REFRESH (Oracle) kunye ne-INDEXED VIEW (Iseva ye-Microsoft SQL). Kwi-PostgreSQL, i-MATERIALIZED VIEW ayinakuhlaziywa kwintengiselwano, kodwa kuphela ngesicelo (kwaye nakwizithintelo ezingqongqo kakhulu), ngoko asiyicingi. Kodwa baneengxaki ezininzi ezinciphisa kakhulu ukusetyenziswa kwazo.
Okokuqala, unokwenza kuphela ukwenza izinto ezibonakalayo ukuba sele wenze i-VIEW eqhelekileyo. Kungenjalo, kuya kufuneka uphinde ubhale izicelo ezishiyekileyo ukuze ufikelele kumbono omtsha owenziweyo ukuze usebenzise olu tshintsho. Okanye ushiye yonke into njengoko injalo, kodwa iya kuba ingasebenzi ukuba kukho idatha ethile esele ibalwe kwangaphambili, kodwa imibuzo emininzi ayisoloko iyisebenzisa, kodwa yibale kwakhona.
Okwesibini, banenani elikhulu lezithintelo:
Oracle
5.3.8.4 Izithintelo ngokuBanzi ekuHlaziyweni ngokukhawuleza
Umbuzo ochazayo wembono eyenziweyo uthintelwe ngolu hlobo lulandelayo:
- Imbono eyenziweyo mayingaqulathi iimbekiselo zokungaphindaphindi amabinzana afana
SYSDATE
kwayeROWNUM
.- Umbono owenziweyo kufuneka ungaqulathi iireferensi
RAW
orLONG
RAW
iintlobo zedatha.- Ayinakuqulatha a
SELECT
uluhlu lokubuza imibuzo.- Ayinakuqulatha imisebenzi yohlalutyo (umzekelo,
RANK
) kwiSELECT
isigatya.- Ayinakubhekisa kwitafile apho i-
XMLIndex
isalathisi sichaziwe.- Ayinakuqulatha a
MODEL
isigatya.- Ayinakuqulatha a
HAVING
igatya elinombuzo ongaphantsi.- Ayinakuqulatha imibuzo ebekwe kwindlwane enayo
ANY
,ALL
, okanyeNOT
EXISTS
.- Ayinakuqulatha a
[START WITH …] CONNECT BY
isigatya.- Ayinakuqulatha iitheyibhile zeenkcukacha ezininzi kwiindawo ezahlukeneyo.
ON
COMMIT
iimbono ezenziweyo azinakuba neetafile zeenkcukacha ezikude.- Iimboniselo ezifakwe kwindlwane kufuneka zibe nokudibanisa okanye ukudibanisa.
- Iimbono zokudityaniswa kwezinto ezibonakalayo kunye nezimvo ezidityanisiweyo kunye
GROUP
BY
Igatya alinakukhetha kwitafile elungelelanisiweyo yesalathiso.5.3.8.5 Izithintelo kuHlaziyo oluKhawuleza kwiiMbono zeMathiriyeli ngokuManywa kuphela
Ukuchaza imibuzo yeembono ezenziweyo ngokudibanisa kuphela kwaye akukho zidityaniso zinezithintelo zilandelayo ekuhlaziyeni ngokukhawuleza:
- Zonke izithintelo ezivela kwi «
Izithintelo ngokuBanzi ekuHlaziyweni ngokukhawuleza «.- Abanakuba nayo
GROUP
BY
amagatya okanye aggregates.- Imikrozo yazo zonke iitafile kwi
FROM
uluhlu kufuneka luvele kwiSELECT
uluhlu lombuzo.- Iilog zokujonga ezibonakalayo kufuneka zibekho kunye nemiqolo yazo zonke iitafile ezisezantsi kwi
FROM
uluhlu lombuzo.- Awungekhe udale umbono okhawulezayo ovuselelekayo ovela kwiitafile ezininzi kunye nokudibanisa okulula okubandakanya uhlobo lwekholamu kwi
SELECT
ngxelo.Kwakhona, indlela yokuhlaziya oyikhethayo ayizukusebenza kakuhle ukuba:
- Umbuzo ochazayo usebenzisa udibaniso lwangaphandle olusebenza njengedibaniso yangaphakathi. Ukuba umbuzo ochazayo uqulathe udibaniso olunjalo, cinga ngokuphinda ubhale umbuzo ochazayo ukuze uqulathe ukudibanisa kwangaphakathi.
- The
SELECT
Uluhlu lwemboniselo ebonakalayo luqulathe amabinzana akwikholamu ezisuka kwiitafile ezininzi.5.3.8.6 Izithintelo kuHlaziyo oluKhawuleza kwiiMbono zeMathiriyeli ngeeAggregates
Ukuchaza imibuzo yeembono ezenziweyo kunye ne-aggregates okanye ukujoyina kunezithintelo zilandelayo ekuhlaziyeni ngokukhawuleza:
- Zonke izithintelo ezivela kwi «
Izithintelo ngokuBanzi ekuHlaziyweni ngokukhawuleza «.Ukuhlaziya ngokukhawuleza kuxhaswa zombini
ON
COMMIT
kwayeON
DEMAND
iimbono ezenziweyo, nangona kunjalo, le miqobo ilandelayo iyasebenza:
- Zonke iitheyibhile ezikumbono wezinto ezibonakalayo kufuneka zibe neendawo zokujonga izinto ezibonakalayo, kwaye iilogi zokujonga ezibonakalayo kufuneka:
- Ziqulathe zonke iikholamu ezivela kwitheyibhile ekhankanyiweyo kumbono owenziweyo.
- Chaza nge
ROWID
kwayeINCLUDING
NEW
VALUES
.- Cacisa
SEQUENCE
igatya ukuba itheyibhile kulindeleke ukuba ibe nomxube wokufakela/umthwalo othe ngqo, ucinywe, kunye nohlaziyo.
- kuphela
SUM
,COUNT
,AVG
,STDDEV
,VARIANCE
,MIN
kwayeMAX
zixhaswa ukuhlaziya ngokukhawuleza.COUNT(*)
kufuneka ichazwe.- Imisebenzi edibeneyo kufuneka yenzeke kuphela njengenxalenye engaphandle yentetho. Oko kukuthi, aggregates ezifana
AVG(AVG(x))
orAVG(x)
+AVG(x)
akuvumelekanga.- Kwi-aggregate nganye efana
AVG(expr)
, ehambelanayoCOUNT(expr)
kufuneka abekho. U-Oracle uyakucebisa okoSUM(expr)
kucaciswa.- If
VARIANCE(expr)
orSTDDEV(expr
) kucacisiwe,COUNT(expr)
kwayeSUM(expr)
kufuneka ichazwe. U-Oracle uyakucebisa okoSUM(expr *expr)
kucaciswa.- The
SELECT
ikholamu kumbuzo ochazayo ayinakuba yintetho entsonkothileyo enezintlu ezisuka kwisiseko seetafile ezininzi. Indlela enokwenzeka yokusombulula oku kukusebenzisa umbono owenziwe ngendlwane.- The
SELECT
uluhlu kufuneka luqulathe zonkeGROUP
BY
Iikholamu.- Imbono eyenziweyo ayisekelwanga kwitafile enye okanye ngaphezulu ezikude.
- Ukuba usebenzisa i-
CHAR
uhlobo lwedatha kwiikholamu zokucoca zelog yembonakalo ebonakalayo, iiseti zabalinganiswa bendawo enkulu kunye nembonakalo ebonakalayo kufuneka ifane.- Ukuba umbono wezinto ezibonakalayo unenye yezi zilandelayo, ngoko ukuhlaziya ngokukhawuleza kuxhaswa kuphela kwiifakelo eziqhelekileyo ze-DML kunye nemithwalo ethe ngqo.
- Iimbono eziphathekayo nge
MIN
orMAX
Amanqaku ewonke- Iimbono eziphathekayo eziye
SUM(expr)
kodwa hayiCOUNT(expr)
- Iimbono eziphathekayo ngaphandle
COUNT(*)
Umbono onjalo wezinto ezibonakalayo ubizwa ngokuba ngumbono wokufaka kuphela.
- Umbono obonakalayo kunye
MAX
orMIN
iyahlaziyeka ngokukhawuleza emva kokucima okanye ukuxuba iingxelo ze-DML ukuba ayinayoWHERE
isigatya.
Ukuhlaziywa ngokukhawuleza okukhulu/umzuzu emva kokucima okanye i-DML exutyiweyo ayinayo indlela yokuziphatha efana neyokufaka kuphela. Icima kwaye ibuyise amaxabiso aphezulu/min kumaqela achaphazelekayo. Kufuneka uqaphele impembelelo yayo yokusebenza.- Iimbono eziphathekayo ezinezimvo ezichaziweyo okanye imibuzo kwi
FROM
Igatya linokuhlaziywa ngokukhawuleza ukuba iimbono zinokudityaniswa ngokupheleleyo. Ngolwazi malunga nokuba zeziphi iimbono eziza kudityaniswa, bonaOracle Database SQL Language Reference .- Ukuba akukho zidibaniselwano zangaphandle, unokuba nokhetho olungenasizathu kwaye uzibandakanye kwi
WHERE
isigatya.- Iimbono ezidityanisiweyo ezidityanisiweyo kunye nezidibanisi zangaphandle zihlaziyeka ngokukhawuleza emva kwe-DML eqhelekileyo kunye nemithwalo ethe ngqo, ngaphandle kokuba itafile yangaphandle kuphela ilungisiwe. Kwakhona, imiqobo eyodwa kufuneka ibekho kwiikholamu zokudityaniswa kwetafile yokudibanisa yangaphakathi. Ukuba kukho ukudityaniswa kwangaphandle, onke amakhonkco kufuneka adityaniswe ngawo
AND
kwaye kufuneka basebenzise ukulingana (=
) umsebenzisi.- Ngeembono ezenziweyo nge
CUBE
,ROLLUP
, iiseti zamaqela, okanye ukudityaniswa kwazo, ezi zithintelo zilandelayo ziyasebenza:
- The
SELECT
uluhlu kufuneka luqulathe umahluli wamaqela onokuba ngu aGROUPING_ID
umsebenzi kubo bonkeGROUP
BY
intetho okanyeGROUPING
imisebenzi enye nganyeGROUP
BY
intetho. Umzekelo, ukuba iGROUP
BY
igatya lembono eyenziweyo ngu "GROUP
BY
CUBE(a, b)
", emva kokoSELECT
uluhlu kufuneka luqulathe nokuba "GROUPING_ID(a, b)
"okanye"GROUPING(a)
AND
GROUPING(b)
» ukuze umbono owenziweyo uhlaziyeke ngokukhawuleza.GROUP
BY
akufuneki kubangele nawaphi na amaqela aphindiweyo. Umzekelo, "GROUP BY a, ROLLUP(a, b)
" ayihlaziyeki ngokukhawuleza kuba iphumela kumaqela aphindiweyo "(a), (a, b), AND (a)
«.5.3.8.7 Izithintelo kuHlaziyo oluKhawuleza kwiiMbono zeMathiriyeli kunye ne-UNION BONKE
Iimbono eziphathekayo kunye ne
UNION
ALL
misela inkxaso yomsebenzisi iREFRESH
FAST
ukhetho ukuba le miqathango ilandelayo yanelisiwe:
- Umbuzo ochazayo kufuneka ube ne
UNION
ALL
umqhubi kwinqanaba eliphezulu.The
UNION
ALL
umsebenzisi akanakulungiselelwa ngaphakathi kwesicelo esingaphantsi, ngaphandle kokunye: IUNION
ALL
inokuba kwi-subquery kwiFROM
Igatya elinikeziweyo umbuzo ochazayo uyifomSELECT * FROM
(jonga okanye ubuze ngeUNION
ALL
) njengakumzekelo ulandelayo:YENZA IMBONO yokujonga_with_unionall AS (KHETHA c.rowid crid, c.cust_id, 2 umakishayo UKUSUKA kubathengi c APHO c.cust_last_name = 'Smith' UNION BONKE KHETHA c.rowid crid, c.cust_id, 3 umakishayo UKUSUKA kubathengi c APHO c.cust_last_ 'Jones'); YENZA UMBONO OLUBONAKALISWEYO unionall_inside_view_mv HLAZIYA NGOKUKHAWULEZA KWIMFUNO NJENGOKO KHETHA * UKUSUKA kumbono_nge_unionall;Qaphela ukuba umbono
view_with_unionall
iyanelisa iimfuno zokuhlaziya ngokukhawuleza.- Ibhloko yombuzo ngamnye kwi
UNION
ALL
Umbuzo kufuneka wanelise iimfuno zembono ekhawulezayo ehlaziyekayo eyenziwe ngezinto ezihlanganisiweyo okanye imbonakalo ekhawulezayo ehlaziyekayo eyenziwe ngezinto ezidibeneyo.Iilogi zembonakalo ezilungeleleneyo kufuneka zenziwe kwiitafile njengoko zifuneka kuhlobo oluhambelanayo lombono okhawulezayo ohlaziyekayo.
Qaphela ukuba i-Database ye-Oracle ikwavumela imeko ekhethekileyo yetheyibhile enye imboniselo ebonakalayo kunye nokudibanisa kuphela kubonelelweROWID
ikholam ibandakanyiwe kwiSELECT
uluhlu nakwilog yembonakalo ebonakalayo. Oku kuboniswa kumbuzo ochazayo wembonoview_with_unionall
.- The
SELECT
uluhlu lombuzo ngamnye kufuneka lubandakanye aUNION
ALL
umakishi, kunye neUNION
ALL
ikholamu kufuneka ibenenani elahlukileyo elingaguqukiyo okanye ixabiso lomtya kwinto nganyeUNION
ALL
isebe. Ngaphezu koko, ikholomu yokumakisha mayivele kwindawo efanayo kwi-ordinal positionSELECT
uluhlu lwebhloko yombuzo ngamnye. Bona"IMANYANO YONKE iMakisha kwaye uMbuzo uphinde ubhale »ukufumana ulwazi oluninzi malungaUNION
ALL
amakishi.- Eminye imiba enje ngezidibaniselwano zangaphandle, faka-kuphela i-aggregate eyenziweyo yembonakalo yemibuzo kunye neetafile ezikude azixhaswanga kwiimbono ezenziweyo
UNION
ALL
. Qaphela, nangona kunjalo, ukuba iimbono ezenziweyo ezisetyenziswe kuphindaphindo, ezingaqulathanga izidibaniselwano okanye iaggregates, zinokuhlaziyeka ngokukhawuleza xaUNION
ALL
okanye iitafile ezikude zisetyenziswa.- Iparamitha yokuqalisa ukuhambelana kufuneka isetelwe ku-9.2.0 okanye ngaphezulu ukwenza umbono okhawulezayo ohlaziyekayo
UNION
ALL
.
Andifuni ukubacaphukisa abalandeli be-Oracle, kodwa ngokujonga uluhlu lwabo lwezithintelo, kubonakala ngathi le ndlela ayibhalwanga kwimeko eqhelekileyo, isebenzisa uhlobo oluthile lwemodeli, kodwa ngamawaka amaNdiya, apho wonke umntu wayenikwe ithuba babhale isebe labo, kwaye ngamnye kubo wenza njengoko wayenako. Ukusebenzisa le ndlela yokuqiqa kufana nokuhamba kwindawo enezigcayiseli. Unokufumana umgodi nangaliphi na ixesha ngokubetha enye yezithintelo ezingabonakaliyo. Indlela esebenza ngayo ikwangumbuzo owahlukileyo, kodwa ingaphaya kwemida yeli nqaku.
IMicrosoft SQL Server
Iimfuneko ezongezelelweyo
Ukongeza kwiinketho ze-SET kunye neemfuno zomsebenzi wokumisela, ezi mfuno zilandelayo kufuneka zifezekiswe:
- Umsebenzisi osebenzayo
CREATE INDEX
kufuneka abe ngumnini wembono.- Xa udala isalathisi, i
IGNORE_DUP_KEY
ukhetho kufuneka lusetwe ku CIMA (ulungiselelo olungagqibekanga).- Iitheyibhile kufuneka zichazwe ngamagama amacandelo amabini, scheme.igama letafile kwinkcazo yokujonga.
- Imisebenzi echazwe ngumsebenzisi echazwe kwimboniselo kufuneka yenziwe ngokusebenzisa i
WITH SCHEMABINDING
ukhetho.- Nayiphi na imisebenzi echazwe ngumsebenzisi ekubhekiselwa kuyo kwimboniselo kufuneka ibhekiswe ngamagama angamacandelo amabini, ..
- Ipropathi yokufikelela kwidatha yomsebenzisi-echazwe kufuneka ibe
NO SQL
, kunye nepropati yokufikelela yangaphandle kufuneka ibeNO
.- Ulwimi oluqhelekileyo lwexesha lokusebenza (CLR) imisebenzi inokuvela kuluhlu olukhethiweyo lwemboniselo, kodwa ayinakuba yinxalenye yenkcazelo yeqhosha elidityanisiweyo lesalathisi. Imisebenzi ye-CLR ayinakuvela kwigatya LAPHO lemboniselo okanye igatya elithi ON lomsebenzi we-JOIN kwimboniselo.
- Imisebenzi ye-CLR kunye neendlela ze-CLR-iintlobo ezichazwe ngumsebenzisi ezisetyenziswe kwinkcazo yembono kufuneka ibe neepropati ezibekwe njengoko kuboniswe kwitheyibhile elandelayo.
ipropati
PhawulaI-DETERMINISTIC = TRUE
Kufuneka ibhengezwe ngokucacileyo njengophawu lwendlela yeMicrosoft .NET Framework.OKUCHANILEYO = TRUE
Kufuneka ibhengezwe ngokucacileyo njengophawu lwendlela ye-.NET Framework.UKUFIKELELA KWEDATHA = AKUKHO SQL
Imiselwe ngokuseta uphawu loFikelelo lweDatha kwiDataAccessKind.None kunye neSistimDataUkufikelela uphawu kwiSistimDataAccessKind.None.UFIKELELO NGAPHANDLE = NO
Le propati ayigqibekanga ku-NO kwiindlela ze-CLR.- Umbono kufuneka udalwe ngokusebenzisa i
WITH SCHEMABINDING
ukhetho.- Imbono kufuneka ibhekiselele kuphela kwisiseko seetafile ezikwisiseko sedatha enye njengemboniselo. Imbono ayikwazi ukubhekisa ezinye iimbono.
- Ingxelo KHETHA kwinkcazo yemboniselo mayingaqulathanga le miba ilandelayo yeTransact-SQL:
COUNT
ROWSET imisebenzi (OPENDATASOURCE
,OPENQUERY
,OPENROWSET
, KUNYEOPENXML
)
OUTER
ukujoyina (LEFT
,RIGHT
, okanyeFULL
)Itheyibhile ethathwayo (ichazwe ngokuchaza a
SELECT
ingxelo kwiFROM
igatya)
Ukuzibandakanya
Ukuchaza imiqolo ngokusebenzisaSELECT *
orSELECT <table_name>.*
DISTINCT
STDEV
,STDEVP
,VAR
,VARP
, okanyeAVG
Inkcazo yetafile eqhelekileyo (CTE)edadayo1, umbhalo, ntext, umfanekiso, XML, okanye ifayile iikholamu
Ukubuza imibuzo
OVER
igatya, elibandakanya uhlengahlengiso okanye udityaniso lwemisebenzi yefestileIzibhengezo ezipheleleyo (
CONTAINS
,FREETEXT
)
SUM
umsebenzi obhekisa kwintetho engenakucimeka
ORDER BY
Umsebenzi we-CLR ochazwe ngumsebenzisi odibeneyo
TOP
CUBE
,ROLLUP
, okanyeGROUPING SETS
ba sebenzi
MIN
,MAX
UNION
,EXCEPT
, okanyeINTERSECT
ba sebenzi
TABLESAMPLE
Iinguqu kwitheyibhile
OUTER APPLY
orCROSS APPLY
PIVOT
,UNPIVOT
Iiseti zekholamu ezimbalwa
Emgceni (i-TVF) okanye imisebenzi enexabiso letheyibhile yeengxelo ezininzi (MSTVF)
OFFSET
CHECKSUM_AGG
1 Imboniselo enesalathiso inokuqulatha edadayo ikholamu; nangona kunjalo, imiqolo enjalo ayinakubandakanywa kwiqhosha lesalathisi esidityanisiweyo.
- If
GROUP BY
ikhona, inkcazo ye-VIEW kufuneka iqulatheCOUNT_BIG(*)
kwaye kufuneka ingaqulathiHAVING
. EziGROUP BY
Izithintelo zisebenza kuphela kwinkcazo yembono enesalathisi. Umbuzo unokusebenzisa imboniselo enesalathiso kwisicwangciso sayo sophumezo nokuba ayikonelisi eziGROUP BY
izithintelo.- Ukuba inkcazo yemboniselo iqulathe a
GROUP BY
igatya, isitshixo sesalathiso esidityanisiweyo esisodwa singareferensi kuphela iikholamu ezichazwe kwiGROUP BY
isigatya.
Kucacile apha ukuba amaIndiya ayengabandakanyeki, kuba agqibe kwelokuba ayenze ngokwenkqubo “kuncinci, kodwa kulungile.” Oko kukuthi, banemigodi emininzi ebaleni, kodwa indawo yabo icace ngakumbi. Eyona nto iphoxayo kakhulu ngulo mda:
Imbono kufuneka ibhekiselele kuphela kwisiseko seetafile ezikwisiseko sedatha enye njengemboniselo. Imbono ayikwazi ukubhekisa ezinye iimbono.
Kwisigama sethu, oku kuthetha ukuba umsebenzi awukwazi ukufikelela komnye umsebenzi owenziweyo. Oku kunciphisa zonke iingcamango kwi-bud.
Kwakhona, lo mda (kwaye ngakumbi kwisicatshulwa) unciphisa kakhulu iimeko zokusetyenziswa:
Ingxelo KHETHA kwinkcazo yemboniselo mayingaqulathanga le miba ilandelayo yeTransact-SQL:
COUNT
ROWSET imisebenzi (OPENDATASOURCE
,OPENQUERY
,OPENROWSET
, KUNYEOPENXML
)
OUTER
ukujoyina (LEFT
,RIGHT
, okanyeFULL
)Itheyibhile ethathwayo (ichazwe ngokuchaza a
SELECT
ingxelo kwiFROM
igatya)
Ukuzibandakanya
Ukuchaza imiqolo ngokusebenzisaSELECT *
orSELECT <table_name>.*
DISTINCT
STDEV
,STDEVP
,VAR
,VARP
, okanyeAVG
Inkcazo yetafile eqhelekileyo (CTE)edadayo1, umbhalo, ntext, umfanekiso, XML, okanye ifayile iikholamu
Ukubuza imibuzo
OVER
igatya, elibandakanya uhlengahlengiso okanye udityaniso lwemisebenzi yefestileIzibhengezo ezipheleleyo (
CONTAINS
,FREETEXT
)
SUM
umsebenzi obhekisa kwintetho engenakucimeka
ORDER BY
Umsebenzi we-CLR ochazwe ngumsebenzisi odibeneyo
TOP
CUBE
,ROLLUP
, okanyeGROUPING SETS
ba sebenzi
MIN
,MAX
UNION
,EXCEPT
, okanyeINTERSECT
ba sebenzi
TABLESAMPLE
Iinguqu kwitheyibhile
OUTER APPLY
orCROSS APPLY
PIVOT
,UNPIVOT
Iiseti zekholamu ezimbalwa
Emgceni (i-TVF) okanye imisebenzi enexabiso letheyibhile yeengxelo ezininzi (MSTVF)
OFFSET
CHECKSUM_AGG
OUTER JOINS, UNION, ORDER BY kunye nabanye akuvumelekanga. Bekunokuba lula ukucacisa ukuba yintoni na enokusetyenziswa kunokuba ingasetyenziswa. Uluhlu mhlawumbi lunokuba luncinci kakhulu.
Ukushwankathela: isethi enkulu yezithintelo kuzo zonke (makhe siqaphele urhwebo) DBMS vs none (ngaphandle kwengqiqo enye, kungekhona ubuchwepheshe) kwi-LGPL iteknoloji. Nangona kunjalo, kufuneka kuqatshelwe ukuba ukuphumeza le ndlela kwingqiqo yobudlelwane kunzima kakhulu kunendlela yokusebenza echazwe.
Ukuphunyezwa
Ingaba isebenza kanjani? I-PostgreSQL isetyenziswa “njengomatshini obambekayo”. Kukho i-algorithm entsonkothileyo ngaphakathi eyakha imibuzo. Apha
Ngaba isebenza ngempumelelo? Isebenza kakuhle. Ngelishwa, oku kunzima ukukungqina. Ndingatsho kuphela ukuba ukuba ucinga amawaka emibuzo ekhoyo kwizicelo ezinkulu, ngoko ke ngokomndilili zisebenza kakuhle kunezo zomphuhlisi olungileyo. Umdwelisi wenkqubo weSQL ogqwesileyo unokubhala nawuphi na umbuzo ngokufanelekileyo, kodwa ngewaka lemibuzo akayi kuba nayo inkuthazo okanye ixesha lokuyenza. Ekuphela kwento endinokuyikhankanya njengobungqina bokusebenza kukuba iiprojekthi ezininzi zisebenza kwiqonga elakhiwe kule DBMS.
Kumanqaku alandelayo, ndiza kuthetha malunga nendlela onokuthi ubeke ngayo izithintelo kwimisebenzi, usebenze ngeeseshoni zokutshintsha, kunye nokunye okuninzi.
umthombo: www.habr.com