Kwedlule
Kulesi sihloko, ngizobonisa ukuthi lo mqondo ukuvumela kanjani ukuthi ulinganise ngokushesha futhi kalula ukubhala nokufunda ku-database ngaphandle koshintsho ku-logic yokusebenza. Ukusebenza okufanayo kuzanywe ukusetshenziswa kuma-DBMS esimanje (ikakhulukazi, i-Oracle ne-Microsoft SQL Server). Ekupheleni kwalesi sihloko ngizobonisa ukuthi abakwenzile, ukukubeka kancane, akuzange kusebenze kahle kakhulu.
Incazelo
Njengangaphambili, ukuze ngiqonde kangcono ngizoqala incazelo ngezibonelo. Ake sithi sidinga ukusebenzisa umqondo ozobuyisela uhlu lweminyango nenani labasebenzi abakuyo kanye neholo labo lonke.
Ku-database esebenzayo izobukeka kanje:
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);
Ubunkimbinkimbi bokusebenzisa lo mbuzo kunoma iyiphi i-DBMS buzolingana nalo O(inani labasebenzi)ngoba lesi sibalo sidinga ukuskenwa kwetafula lonke labasebenzi bese kubahlanganisa ngomnyango. Kuzophinde kube nabancane (sikholelwa ukuthi baningi abasebenzi abaningi kuneminyango) okungezayo kuye ngohlelo olukhethiwe O(inombolo yelogi yabasebenzi) noma O(inombolo yeminyango) ukuqoqana nokunye.
Kuyacaca ukuthi ukukhishwa okuphezulu kungase kuhluke kuma-DBMS ahlukene, kodwa ubunzima ngeke bushintshe nganoma iyiphi indlela.
Ekusetshenzisweni okuhlongozwayo, i-DBMS esebenzayo izokhiqiza umbuzo owodwa omncane ozobala amanani adingekayo omnyango, bese yenza UKUJOYINA nethebula lomnyango ukuze uthole igama. Nokho, kumsebenzi ngamunye, lapho umemezela, kungenzeka ukusetha umaka okhethekile WE-MATERIALIZED. Isistimu izodala ngokuzenzakalelayo inkambu ehambisanayo yomsebenzi ngamunye onjalo. Lapho ushintsha inani lomsebenzi, inani lenkambu nalo lizoshintsha kumsebenzi ofanayo. Lapho ufinyelela lo msebenzi, inkambu ebalwe ngaphambilini izofinyelelwa.
Ikakhulukazi, uma usetha okuthi MATERIALIZED kumisebenzi countAbasebenzi и iholoIsamba, khona-ke izinkambu ezimbili zizokwengezwa etafuleni nohlu lweminyango, ezogcina isibalo sabasebenzi kanye nesamba somholo wabo. Noma nini lapho kuba noshintsho kubasebenzi, amaholo abo noma izinhlaka zomnyango, uhlelo luzoshintsha ngokuzenzakalelayo amanani ale mikhakha. Umbuzo ongenhla uzofinyelela lezi zinkambu ngokuqondile futhi uzosetshenziswa kuwo O(inombolo yeminyango).
Iyini imikhawulo? Into eyodwa kuphela: umsebenzi onjalo kufanele ube nenani elilinganiselwe lamanani wokufaka lapho inani lawo lichazwa khona. Uma kungenjalo, ngeke kwenzeke ukwakha itafula eligcina wonke amanani alo, ngoba angeke kube khona itafula elinenombolo engapheli yemigqa.
Isibonelo:
employeesCount ‘Количество сотрудников с зарплатой > N’ (Department d, NUMERIC[10,2] N) =
GROUP SUM salary(Employee e) IF department(e) = d AND salary(e) > N;
Lo msebenzi uchazwa ngenani elingapheli lamanani ka-N (isibonelo, noma yiliphi inani elingalungile lifanelekile). Ngakho-ke, awukwazi ukubeka i-MATRIALIZED kuyo. Ngakho-ke lokhu kuwumkhawulo onengqondo, hhayi owobuchwepheshe (okungukuthi, hhayi ngoba asikwazanga ukuwusebenzisa). Uma kungenjalo, ayikho imikhawulo. Ungasebenzisa amaqoqo, ukuhlunga, KANYE kanye NOMA, UKUHLUKANA, ukuphindaphinda, njll.
Isibonelo, enkingeni engu-2.2 ye-athikili edlule, ungafaka i-MATERIALIZED kuyo yomibili 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;
Isistimu ngokwayo izodala ithebula elilodwa elinokhiye bohlobo ikhasimende, Product и INTEGER, izongeza izinkambu ezimbili kuyo futhi izobuyekeza amanani enkambu kuzo nganoma yiziphi izinguquko. Uma kwenziwa amanye amakholi kule misebenzi, ngeke abalwe, kodwa kunalokho amanani azofundwa ezinkambini ezihambisanayo.
Ngokusebenzisa lo mshini, ungakwazi, ngokwesibonelo, ukuqeda ukuphindaphinda (CTE) emibuzweni. Ikakhulukazi, cabangela amaqembu akha isihlahla esebenzisa ubuhlobo bengane/nomzali (iqembu ngalinye linesixhumanisi esiya kumzali walo):
parent = DATA Group (Group);
Kusizindalwazi esisebenzayo, i-recursion logic ingacaciswa kanje:
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;
Kusukela ngomsebenzi nguMzali imakwe ngokuthi MATERIALIZED, khona-ke itafula elinokhiye ababili (amaqembu) lizodalelwa lona, lapho inkambu nguMzali kuzoba yiqiniso kuphela uma ukhiye wokuqala kuyingane yesibili. Inani lokufakiwe kuleli thebula lizolingana nenani lamaqembu eliphindwe ngokujula okumaphakathi kwesihlahla. Uma udinga, isibonelo, ukubala inani lenzalo yeqembu elithile, ungasebenzisa lo msebenzi:
childrenCount (Group g) = GROUP SUM 1 IF isParent(Group child, g);
Ngeke ibe khona i-CTE embuzweni we-SQL. Kunalokho kuzoba ne-GROUP BY elula.
Usebenzisa lo mshini, ungaphinda wenze i-database ibe i-normalize kalula uma kunesidingo:
CLASS Order 'Заказ';
date 'Дата' = DATA DATE (Order);
CLASS OrderDetail 'Строка заказа';
order 'Заказ' = DATA Order (OrderDetail);
date 'Дата' (OrderDetail d) = date(order(d)) MATERIALIZED INDEXED;
Uma ubiza umsebenzi Usuku kumugqa we-oda, inkambu okukhona kuyo inkomba izofundwa etafuleni ngemigqa yokuhleleka. Uma idethi ye-oda ishintsha, isistimu ngokwayo izobala kabusha ngokuzenzakalelayo idethi eyenziwe i-denormalized kulayini.
Izinzuzo
Lo mshini uphelele ngani? Kuma-DBMS akudala, ngaphandle kwemibuzo yokubhala kabusha, umthuthukisi noma i-DBA angashintsha izinkomba kuphela, anqume izibalo futhi atshele umhleli wemibuzo ukuthi asebenzise kanjani (futhi ama-HINT atholakala kuphela kuma-DBMS ezentengiso). Kungakhathaliseki ukuthi bazama kangakanani, ngeke bakwazi ukuqedela umbuzo wokuqala esihlokweni esithi O (inani leminyango) ngaphandle kokushintsha imibuzo noma ukwengeza izibangeli. Kuhlelo oluhlongozwayo, esigabeni sokuthuthukiswa akudingeki ucabange ngesakhiwo sokugcinwa kwedatha nokuthi yiziphi izilinganiso ozozisebenzisa. Konke lokhu kungashintshwa kalula ku-fly, ngokuqondile ekusebenzeni.
Ngokwenza kubukeka kanje. Abanye abantu bathuthukisa ukucabanga okunengqondo ngokusekelwe emsebenzini abawenzayo. Abawaqondi ama-algorithms nokuba yinkimbinkimbi kwawo, noma izinhlelo zokusebenza, noma izinhlobo zokujoyina, nanoma iyiphi enye ingxenye yobuchwepheshe. Laba bantu bangabahlaziyi bebhizinisi abaningi kunonjiniyela. Bese, konke lokhu kungena ekuhlolweni noma ekusebenzeni. Inika amandla ukuloga kwemibuzo ehlala isikhathi eside. Uma kutholwa umbuzo omude, abanye abantu (abasebenza kakhulu - ikakhulukazi i-DBA) banquma ukunika amandla i-MATERIALIZED emsebenzini othile omaphakathi. Lokhu kunciphisa ukurekhoda kancane (njengoba kudinga ukubuyekeza inkambu eyengeziwe kumsebenzi). Kodwa-ke, akuwona kuphela lo mbuzo osheshisa kakhulu, kodwa nabo bonke abanye abasebenzisa lo msebenzi. Ngesikhathi esifanayo, ukunquma ukuthi yimuphi umsebenzi okufanele uwenze kulula. Amapharamitha amabili ayinhloko: inani lamanani okufaka okungenzeka (lokhu ukuthi mangaki amarekhodi azoba etafuleni elihambisanayo), nokuthi asetshenziswa kangaki kweminye imisebenzi.
Ama-Analog
Ama-DBMS okuhweba esimanje anezindlela ezifanayo: UKUBUKA KWEMATERIALIZED nge-FAST REFRESH (Oracle) kanye ne-INDEXED VIEW (Iseva ye-Microsoft SQL). Ku-PostgreSQL, UKUBUKA KWE-MATERIALIZED akukwazi ukubuyekezwa kuthengiselwano, kodwa kuphela ngesicelo (ngisho nangemikhawulo eqinile), ngakho-ke asikucabangi. Kodwa banezinkinga ezimbalwa ezinciphisa kakhulu ukusetshenziswa kwazo.
Okokuqala, ungavumela ukwenza izinto ezibonakalayo kuphela uma usuvele udale i-VIEW evamile. Uma kungenjalo, kuzodingeka ukuthi ubhale kabusha izicelo ezisele ukuze ufinyelele ukubuka okusanda kwakhiwa ukuze usebenzise lokhu kuguqulwa. Noma shiya yonke into injengoba injalo, kodwa ngeke isebenze okungenani uma kukhona idatha ethile esivele ibalwe ngaphambilini, kodwa imibuzo eminingi ayisebenzisi ngaso sonke isikhathi, kodwa ibala kabusha.
Okwesibili, banenani elikhulu lemikhawulo:
Oracle
5.3.8.4 Imikhawulo Ejwayelekile Yokuvuselela Ngokushesha
Umbuzo ochazayo wokubuka okwenziwe okwenyama ukhawulelwe kanje:
- Ukubuka okwenziwe okwenyama akumele kuqukathe izinkomba zezinkulumo ezingaphindi ezifana
SYSDATE
futhiROWNUM
.- Umbono owenziwe izinto ezibonakalayo akumele uqukathe izinkomba kuwo
RAW
orLONG
RAW
izinhlobo zedatha.- Ayikwazi ukuqukatha a
SELECT
uhlu lokulandelayo.- Ayikwazi ukuqukatha imisebenzi yokuhlaziya (isibonelo,
RANK
) kuSELECT
isigatshana.- Ayikwazi ukubhekisela etafuleni lapho u-
XMLIndex
Inkomba ichaziwe.- Ayikwazi ukuqukatha a
MODEL
isigatshana.- Ayikwazi ukuqukatha a
HAVING
isigatshana esine-subquery.- Ayikwazi ukuqukatha imibuzo esesidlekeni enayo
ANY
,ALL
, nomaNOT
EXISTS
.- Ayikwazi ukuqukatha a
[START WITH …] CONNECT BY
isigatshana.- Ayikwazi ukuqukatha amathebula emininingwane eminingi kumasayithi ahlukene.
ON
COMMIT
ukubukwa okwenyama akukwazi ukuba namathebula emininingwane ekude.- Ukubuka okwenziwe isidleke kufanele kube nokuhlanganisa noma ukuhlanganisa.
- Ukubuka kokujoyina okwenziwe ngezinto ezibonakalayo kanye nokubukwa okuhlanganisiwe okwenziwe nge-
GROUP
BY
isigatshana asikwazi ukukhetha kuthebula elihleliwe lenkomba.5.3.8.5 Imikhawulo Yokuvuselela Ngokushesha Ekubukeni Okubalulekile Ngokujoyina Kuphela
Ukuchaza imibuzo yokubukwa okuphathekayo ngokujoyina kuphela futhi akukho zibalo ezinemikhawulo elandelayo yokuvuselela ngokushesha:
- Yonke imikhawulo evela ku-«
Imikhawulo Ejwayelekile Yokuvuselela Ngokushesha ".- Ngeke babe nakho
GROUP
BY
izigaba noma izilinganiso.- Imigqa yawo wonke amatafula ku
FROM
uhlu kumele luvele kuSELECT
uhlu lombuzo.- Amalogi okubuka enziwe ngezinto kufanele abe nemigqa yawo wonke amathebula ayisisekelo ku
FROM
uhlu lombuzo.- Awukwazi ukudala ukubuka okuphathekayo okuvuseleleke ngokushesha kusuka kumathebula amaningi ngokuhlanganisa okulula okuhlanganisa ikholomu yohlobo lwento
SELECT
isitatimende.Futhi, indlela yokuvuselela oyikhethayo ngeke isebenze kahle uma:
- Umbuzo ochazayo usebenzisa ukujoyina kwangaphandle okufana nokujoyina kwangaphakathi. Uma umbuzo ochazayo uqukethe ukuhlanganisa okunjalo, cabanga ukubhala kabusha umbuzo ochazayo ukuze uqukathe ukujoyina kwangaphakathi.
- The
SELECT
Uhlu lokubuka okwenziwe imizimba luqukethe izinkulumo kumakholomu asuka kumathebula amaningi.5.3.8.6 Imikhawulo Yokuvuselela Ngokushesha Ekubukeni Okubalulekile Okuhlanganisiwe
Ukuchaza imibuzo yokubukwa okuphathekayo okuhlanganisiwe noma okuhlanganisiwe kunemikhawulo elandelayo yokuvuselela ngokushesha:
- Yonke imikhawulo evela ku-«
Imikhawulo Ejwayelekile Yokuvuselela Ngokushesha ".Ukuvuselela okusheshayo kusekelwa kokubili
ON
COMMIT
futhiON
DEMAND
imibono eyenziwe ngezinto ezibonakalayo, nokho imikhawulo elandelayo iyasebenza:
- Wonke amathebula ekubukeni okwenyama kumele abe namalogi okubuka enziwe imizimba, futhi amalogi okubuka enziwe imizimba kumele:
- Iqukethe wonke amakholomu asuka kuthebula okubhekiselwe kulo ekubukeni okwenyama.
- Cacisa nge
ROWID
futhiINCLUDING
NEW
VALUES
.- Cacisa
SEQUENCE
isigatshana uma ithebula kulindeleke ukuthi libe nenhlanganisela yokufaka/ukulayisha okuqondile, okususiwe, kanye nezibuyekezo.
- kuphela
SUM
,COUNT
,AVG
,STDDEV
,VARIANCE
,MIN
futhiMAX
zisekelwa ukuze zivuseleleke ngokushesha.COUNT(*)
kufanele icaciswe.- Imisebenzi ehlanganisiwe kufanele yenzeke kuphela njengengxenye engaphandle yenkulumo. Okusho ukuthi, ama-aggregates afana nalokhu
AVG(AVG(x))
orAVG(x)
+AVG(x)
akuvunyelwe.- Ngesamba ngasinye njenge
AVG(expr)
, okuhambisanayoCOUNT(expr)
kumele abe khona. U-Oracle uncoma lokhoSUM(expr)
kucaciswe.- If
VARIANCE(expr)
orSTDDEV(expr
) kucacisiwe,COUNT(expr)
futhiSUM(expr)
kufanele icaciswe. U-Oracle uncoma lokhoSUM(expr *expr)
kucaciswe.- The
SELECT
ikholomu embuzweni ochazayo ayikwazi ukuba yinkulumo eyinkimbinkimbi enamakholomu asuka kumathebula ayisisekelo amaningi. Isixazululo esingase sibe khona kulokhu ukusebenzisa umbono owenziwe isidleke.- The
SELECT
uhlu kufanele luqukathe konkeGROUP
BY
amakholomu.- Ukubuka okwenziwe okwenyama akusekelwe kuthebula elikude elilodwa noma amaningi.
- Uma usebenzisa a
CHAR
uhlobo lwedatha kumakholomu okuhlunga welogi yokubuka eyenziwe yaba yinto ebonakalayo, amasethi ezinhlamvu zesayithi eliyinhloko kanye nokubuka okwenziwe okwenyama kufanele kufane.- Uma ukubuka okwenyama kunokukodwa kwalokhu okulandelayo, khona-ke ukuvuselela okusheshayo kusekelwa kuphela okufakwayo okuvamile kwe-DML kanye nemithwalo eqondile.
- Ukubuka okwenziwe ngezinto nge
MIN
orMAX
abahlanganayo- Ukubuka okwenziwe ngezinto ezinakho
SUM(expr)
kodwa chaCOUNT(expr)
- Ukubuka okwenziwe ngezinto ngaphandle
COUNT(*)
Umbono onjalo owenziwe waba yinyama ubizwa ngokuthi umbono owenziwe ngezinto ezifakwayo kuphela.
- Umbono owenziwe ngenyama
MAX
orMIN
ivuseleleka ngokushesha ngemva kokususa noma izitatimende ezixubile ze-DML uma ingenayo aWHERE
isigatshana.
Ukuvuselela okusheshayo okukhulu/kwamaminithi ngemva kokususwa noma i-DML exutshiwe ayinakho ukuziphatha okufanayo nekesi lokufaka kuphela. Isusa futhi ibale kabusha amanani aphezulu/amaminithi emaqenjini athintekile. Udinga ukuqaphela umthelela wayo wokusebenza.- Ukubuka okwenziwe ngezinto ezinokubukwa okuqanjwe igama noma imibuzo emincane ku
FROM
isigatshana singavuselelwa ngokushesha inqobo nje uma imibono ingahlanganiswa ngokuphelele. Ukuze uthole ulwazi ngokuthi yikuphi ukubuka okuzohlanganiswa, bhekaI-Oracle Database SQL Language Reference .- Uma kungabikho ukujoyina kwangaphandle, ungase ube nezinketho ezingafanele futhi ujoyine
WHERE
isigatshana.- Ukubuka okuhlanganisiwe okuhlanganisiwe okuhlangene kwangaphandle kuvuseleleka ngokushesha ngemva kwe-DML evamile kanye nemithwalo eqondile, inqobo nje uma kulungiswe ithebula elingaphandle kuphela. Futhi, imigoqo eyingqayizivele kufanele ibe khona kumakholomu okujoyina ethebula lokuhlanganisa langaphakathi. Uma kukhona ukuhlanganisa kwangaphandle, wonke amajoyinti kufanele axhunywe ngawo
AND
futhi kufanele asebenzise ukulingana (=
) umqhubi.- Okokubuka okwenziwe ngenyama nge
CUBE
,ROLLUP
, amasethi eqembu, noma ukuhlanganisa kwawo, imikhawulo elandelayo iyasebenza:
- The
SELECT
uhlu kufanele luqukathe isihlukanisi seqembu esingaba aGROUPING_ID
ukusebenza kukho konkeGROUP
BY
izinkulumo nomaGROUPING
imisebenzi eyodwa ngayinyeGROUP
BY
isisho. Isibonelo, uma i-GROUP
BY
isigatshana sombono owenziwe ngezinto ezibonakalayo sithi "GROUP
BY
CUBE(a, b)
", bese kuthiSELECT
uhlu kufanele luqukathe noma "GROUPING_ID(a, b)
»noma «GROUPING(a)
AND
GROUPING(b)
»ukuze umbono owenziwe ngezinto ezibonakalayo uvuseleleke ngokushesha.GROUP
BY
akufanele kuphumele kunoma yimaphi amaqembu ayimpinda. Ngokwesibonelo, "GROUP BY a, ROLLUP(a, b)
" ayivuseleleki ngokushesha ngoba iholela emaqenjini ayimpinda "(a), (a, b), AND (a)
".5.3.8.7 Imikhawulo Yokuvuselela Ngokushesha Ekubukeni Okuphathekayo nge-UNION ALL
Ukubukwa kwezinto ezibonakalayo nge
UNION
ALL
setha ukusekelwa komsebenzisi iREFRESH
FAST
inketho uma izimo ezilandelayo zaneliswa:
- Umbuzo ochazayo kufanele ube ne-
UNION
ALL
opharetha ezingeni eliphezulu.The
UNION
ALL
i-opharetha ayikwazi ukushumekwa ngaphakathi kombuzo omncane, ngaphandle kokukodwa: IUNION
ALL
kungaba ku-subquery kuFROM
isigatshana esihlinzekwe ukuthi umbuzo ochazayo ungokwefomuSELECT * FROM
(buka noma buza nge-UNION
ALL
) njengakusibonelo esilandelayo:DALA UKUBUKA UKUBUKWA_with_unionall AS (KHETHA c.rowid crid, c.cust_id, 2 umaka OVELA KUmakhasimende c LAPHO c.cust_last_name = 'Smith' UNION BONKE KHETHA c.rowid crid, c.cust_id, 3 umaka KUSUKA kumakhasimende c LAPHO c.cust_last_ 'Jones'); DALA UKUBUKA OKUNGEZESIFUNDAZWE unionall_inside_view_mv VUSELELA NGESIKHATHI NGESIDINGO NJENGOBA KHETHA * KUSUKA ku-view_with_unionall;Qaphela ukuthi umbono
view_with_unionall
yanelisa izimfuneko zokuvuselela ngokushesha.- Ibhulokhi ngayinye yombuzo ku
UNION
ALL
umbuzo kufanele wenelise izimfuneko zokubuka okwenziwe kabusha okuvuseleleka ngokushesha ngamanani ahlanganisiwe noma ukubuka okuphathekayo okuvuselelekayo okuvuselelekayo okunamajoyinti.Amalogi okubuka enziwe imizimba efanelekile kufanele adalwe emathebulani njengoba kudingekile ohlotsheni oluhambisanayo lokubuka okwenziwe kabusha okuvuseleleka ngokushesha.
Qaphela ukuthi i-Oracle Database iphinde ivumele isimo esikhethekile sokubuka okwenziwe kwethebula elilodwa ngokujoyina kuphela uma kunikezweROWID
ikholomu ifakiwe kuSELECT
ohlwini nakulogi lokubuka elenziwe labonakala. Lokhu kuboniswa embuzweni ochazayo wokubukaview_with_unionall
.- The
SELECT
Uhlu lombuzo ngamunye kumele lubandakanye aUNION
ALL
umaka, kanye neUNION
ALL
ikholomu kumelwe ibe nenani elingashintshi lenombolo noma iyunithi yezinhlamvu ngayinyeUNION
ALL
igatsha. Ngokuqhubekayo, ikholomu yomaka kufanele ivele endaweni ye-ordinal efanayo ku-SELECT
uhlu lwebhulokhi yombuzo ngamunye. Bona "I-UNION ALL Marker bese Ubhala kabusha Umbuzo »ukuthola ulwazi olwengeziwe mayelanaUNION
ALL
izimpawu.- Ezinye izici ezifana nokujoyina kwangaphandle, imibuzo yokubuka ye-aggregate kuphela kanye namathebula akude awasekelwe ekubukeni okwenziwe ngenyama
UNION
ALL
. Qaphela, nokho, ukuthi imibono eyenziwe yaba yinto esetshenziswa ekuphindaphindeni, engaqukathi ukuhlanganisa noma izilinganiso, ingavuselelwa ngokushesha umaUNION
ALL
noma amatafula akude asetshenziswa.- Ipharamitha yokuqalisa ukuhambisana kufanele isethelwe ku-9.2.0 noma ngaphezulu ukuze udale ukubuka okuphathekayo okuvuseleleke ngokushesha nge
UNION
ALL
.
Angifuni ukucasula abalandeli be-Oracle, kodwa ngokwahlulela ngohlu lwabo lwemikhawulo, kubonakala sengathi lo mshini awubhalwanga esimweni esivamile, usebenzisa uhlobo oluthile lwemodeli, kodwa izinkulungwane zamaNdiya, lapho wonke umuntu wanikezwa ithuba bhala igatsha labo, futhi yilowo nalowo wenza lokho ayengakwenza. Ukusebenzisa le nqubo ngomqondo wangempela kufana nokuhamba endaweni yezimayini. Ungathola imayini nganoma yisiphi isikhathi ngokushaya eyodwa yemikhawulo engabonakali. Ukuthi isebenza kanjani futhi kungumbuzo ohlukile, kodwa kungaphezu kobubanzi balesi sihloko.
I-Microsoft SQL Server
Izidingo Ezengeziwe
Ngokungeziwe kuzinketho ze-SET kanye nezidingo zomsebenzi wokunquma, lezi zidingo ezilandelayo kufanele zihlangatshezwe:
- Umsebenzisi owenza
CREATE INDEX
kufanele kube umnikazi wokubuka.- Uma udala inkomba, i
IGNORE_DUP_KEY
inketho kufanele isethwe kokuthi VALIWE (ukulungiselelwa okuzenzakalelayo).- Amathebula kufanele akhonjwe ngamagama anezingxenye ezimbili, i-schema.Igama letafula encazelweni yokubuka.
- Imisebenzi echazwe ngumsebenzisi ebalulwe ekubukeni kumele idalwe kusetshenziswa i-
WITH SCHEMABINDING
inketho.- Noma yimiphi imisebenzi echazwe ngumsebenzisi ebalulwe ekubukeni kufanele ikhonjwe ngamagama anezingxenye ezimbili, ..
- Indawo yokufinyelela idatha yomsebenzi ochazwe ngumsebenzisi kufanele ibe
NO SQL
, kanye nempahla yokufinyelela yangaphandle kufanele ibeNO
.- Imisebenzi ye-Common Language Runtime (CLR) ingavela ohlwini olukhethiwe lokubuka, kodwa ayikwazi ukuba yingxenye yencazelo yokhiye wenkomba ohlanganisiwe. Imisebenzi ye-CLR ayikwazi ukuvela esigatshaneni esithi LAPHO sokubuka noma isigatshana esithi ON sokusebenza JOIN ekubukweni.
- Imisebenzi ye-CLR nezindlela zezinhlobo ezichazwe ngumsebenzisi ze-CLR ezisetshenziswe encazelweni yokubuka kufanele zibe nezakhiwo ezisethwe njengoba kuboniswe kuthebula elilandelayo.
Property
NoteI-DETERMINISTIC = TRUE
Kufanele kumenyezelwe ngokusobala njengesibaluli sendlela ye-Microsoft .NET Framework.IQINISO = IQINISO
Kufanele kumenyezelwe ngokusobala njengesibaluli sendlela ye-.NET Framework.UKUFINYELELA KWEDATHA = AYIKHO i-SQL
Kunqunywa ngokusetha isibaluli se-DataAccess ku-DataAccessKind.None kanye nesibaluli se-SystemDataAccess ku-SystemDataAccessKind.None.UKUFINYELELA NGAPHANDLE = NO
Lesi sici sishintsha ngokuzenzakalelayo sibe ngu-NO emigudwini ye-CLR.- Ukubuka kufanele kudalwe ngokusebenzisa i-
WITH SCHEMABINDING
inketho.- Ukubuka kufanele kubhekise kumathebula ayisisekelo kuphela akusizindalwazi esifanayo nokubuka. Ukubuka akukwazi ukubhekisela okunye ukubuka.
- Isitatimende esithi KHETHA encazelweni yokubuka akumele sibe nezinto ezilandelayo ze-Transact-SQL:
COUNT
Imisebenzi ye-ROWSET (OPENDATASOURCE
,OPENQUERY
,OPENROWSET
, KANYEOPENXML
)
OUTER
ujoyina (LEFT
,RIGHT
, nomaFULL
)Ithebula elisuselwe (lichazwa ngokucacisa a
SELECT
isitatimende kuFROM
isigatshana)
Ukuzijoyina
Icacisa amakholomu ngokusebenzisaSELECT *
orSELECT <table_name>.*
DISTINCT
STDEV
,STDEVP
,VAR
,VARP
, nomaAVG
Inkulumo yethebula evamile (CTE)float1, umbhalo, umbhalo, isithombe, XML, noma i-filestream amakholomu
I-Subquery
OVER
isigatshana, esihlanganisa ukukala noma ukuhlanganisa imisebenzi yewindiIzilandiso zombhalo ogcwele (
CONTAINS
,FREETEXT
)
SUM
umsebenzi obhekisela kwisisho esingaguquleki
ORDER BY
Umsebenzi wokuhlanganisa ochazwe ngumsebenzisi we-CLR
TOP
CUBE
,ROLLUP
, nomaGROUPING SETS
opharetha
MIN
,MAX
UNION
,EXCEPT
, nomaINTERSECT
opharetha
TABLESAMPLE
Okuguquguqukayo kwethebula
OUTER APPLY
orCROSS APPLY
PIVOT
,UNPIVOT
Amasethi amakholomu amancane
I-Inline (TVF) noma imisebenzi enenani lezitatimende eziningi (MSTVF)
OFFSET
CHECKSUM_AGG
1 Ukubuka okunenkomba kungaqukatha float amakholomu; Nokho, amakholomu anjalo awakwazi ukufakwa kukhiye wenkomba ohlanganisiwe.
- If
GROUP BY
ikhona, incazelo VIEW kumele iqukatheCOUNT_BIG(*)
futhi akufanele iqukatheHAVING
. LeziGROUP BY
imikhawulo isebenza kuphela encazelweni yokubuka enenkomba. Umbuzo ungasebenzisa ukubuka okunenkomba ohlelweni lwayo lokusebenza noma ngabe kunganelisi lokhuGROUP BY
imikhawulo.- Uma incazelo yokubuka iqukethe a
GROUP BY
isigatshana, ukhiye wenkomba ehlanganisiwe eyingqayizivele ungabhekisela kuphela kumakholomu ashiwo ku-GROUP BY
isigatshana.
Kuyacaca lapha ukuthi amaNdiya ayengabandakanyeki, njengoba anquma ukukwenza ngokohlelo “kuncane esizokwenza, kodwa kahle.” Okusho ukuthi, banezimayini eziningi enkundleni, kodwa indawo yabo isobala. Into edumaza kakhulu yilo mkhawulo:
Ukubuka kufanele kubhekise kumathebula ayisisekelo kuphela akusizindalwazi esifanayo nokubuka. Ukubuka akukwazi ukubhekisela okunye ukubuka.
Kumagama ethu, lokhu kusho ukuthi umsebenzi awukwazi ukufinyelela omunye umsebenzi owenziwe imizimba. Lokhu kwehlisa yonke imibono ku-bud.
Futhi, lo mkhawulo (futhi ngokuqhubekayo embhalweni) unciphisa kakhulu izimo zokusetshenziswa:
Isitatimende esithi KHETHA encazelweni yokubuka akumele sibe nezinto ezilandelayo ze-Transact-SQL:
COUNT
Imisebenzi ye-ROWSET (OPENDATASOURCE
,OPENQUERY
,OPENROWSET
, KANYEOPENXML
)
OUTER
ujoyina (LEFT
,RIGHT
, nomaFULL
)Ithebula elisuselwe (lichazwa ngokucacisa a
SELECT
isitatimende kuFROM
isigatshana)
Ukuzijoyina
Icacisa amakholomu ngokusebenzisaSELECT *
orSELECT <table_name>.*
DISTINCT
STDEV
,STDEVP
,VAR
,VARP
, nomaAVG
Inkulumo yethebula evamile (CTE)float1, umbhalo, umbhalo, isithombe, XML, noma i-filestream amakholomu
I-Subquery
OVER
isigatshana, esihlanganisa ukukala noma ukuhlanganisa imisebenzi yewindiIzilandiso zombhalo ogcwele (
CONTAINS
,FREETEXT
)
SUM
umsebenzi obhekisela kwisisho esingaguquleki
ORDER BY
Umsebenzi wokuhlanganisa ochazwe ngumsebenzisi we-CLR
TOP
CUBE
,ROLLUP
, nomaGROUPING SETS
opharetha
MIN
,MAX
UNION
,EXCEPT
, nomaINTERSECT
opharetha
TABLESAMPLE
Okuguquguqukayo kwethebula
OUTER APPLY
orCROSS APPLY
PIVOT
,UNPIVOT
Amasethi amakholomu amancane
I-Inline (TVF) noma imisebenzi enenani lezitatimende eziningi (MSTVF)
OFFSET
CHECKSUM_AGG
UKUJOYINA NGAPHANDLE, UNION, ORDER BY nokunye akuvunyelwe. Kungaba lula ukucacisa ukuthi yini engasetshenziswa kunokuthi isetshenziswe yini. Uhlu cishe lungaba lufushane kakhulu.
Ukufingqa: isethi enkulu yemikhawulo kuzo zonke (ake siphawule ezentengiso) DBMS vs none (ngaphandle kokukodwa okunengqondo, hhayi ubuchwepheshe) kubuchwepheshe be-LGPL. Kodwa-ke, kufanele kuqashelwe ukuthi ukusebenzisa le nqubo ku-logic yokuxhumana kunzima kakhulu kunomqondo wokusebenza ochazwe.
Ukuqaliswa
Isebenza kanjani? I-PostgreSQL isetshenziswa “njengomshini obonakalayo”. Kukhona i-algorithm eyinkimbinkimbi ngaphakathi eyakha imibuzo. Lapha
Ingabe isebenza ngempumelelo? Isebenza ngempumelelo. Ngeshwa, lokhu kunzima ukufakazela. Ngingasho nje ukuthi uma ucabangela izinkulungwane zemibuzo ekhona ezinhlelweni ezinkulu, lapho-ke ngokwesilinganiso zisebenza kahle kakhulu kunaleyo yonjiniyela omuhle. Umhleli omuhle kakhulu we-SQL angabhala noma yimuphi umbuzo ngempumelelo, kodwa ngemibuzo eyinkulungwane ngeke abe nesisusa noma isikhathi sokukwenza. Ukuphela kwento engingayibala njengobufakazi bokusebenza ukuthi amaphrojekthi amaningana asebenza endaweni eyakhelwe kule DBMS.
Ezihlokweni ezilandelayo, ngizophinde ngikhulume ngokuthi ungabeka kanjani imingcele emisebenzini, usebenze ngezikhathi zokushintsha, nokunye okuningi.
Source: www.habr.com