Isku dheelli tirka waxay ku qortaa oo ku akhridaa kaydka xogta

Isku dheelli tirka waxay ku qortaa oo ku akhridaa kaydka xogta
Kii hore maqaal Waxaan ku tilmaamay fikradda iyo hirgelinta xog-ururin ku salaysan shaqooyinka, halkii laga isticmaali lahaa jaantusyada iyo goobaha sida xogta xogta ee xidhiidhka ah. Waxay bixisay tusaalooyin badan oo muujinaya faa'iidooyinka habkani u leeyahay kan qadiimiga ah. Qaar badan ayaa u arkay inaysan ku qancin.

Maqaalkan, waxaan ku tusi doonaa sida fikradani kuu ogolaato inaad si dhakhso ah oo habboon u dheelitirto qorista oo u akhrido xogta xogta iyada oo aan wax isbeddel ah ku dhicin macquulnimada hawlgalka. Hawlaha la midka ah ayaa la isku dayay in laga hirgaliyo DBMS-yada ganacsi ee casriga ah (gaar ahaan, Oracle iyo Microsoft SQL Server). Dhamaadka maqaalka waxaan ku tusi doonaa in wixii ay qabteen, si fudud loo dhigo, aysan si fiican u shaqeynin.

Description

Sidii hore oo kale, si loo fahmo wanaagsan waxaan ku bilaabayaa sharaxaadda tusaalayaal. Aynu nidhaahno waxaynu u baahanahay in aynu hirgelino caqli-gal soo celin doona liiska waaxaha tirada shaqaalaha ee ka tirsan iyo wadarta mushaharkooda.

Xogta shaqaynaysa waxay u ekaan doontaa sidan:

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);

Kakanaanta fulinta weydiintan DBMS kasta waxay la mid noqon doontaa O (tirada shaqaalaha)sababtoo ah xisaabintani waxay u baahan tahay in la sawiro dhammaan shaxda shaqaalaha ka dibna loo qaybiyo qayb ahaan. Waxa kale oo jiri doona qaar yar (waxaan aaminsanahay inay jiraan shaqaale badan oo ka badan waaxaha) kabitaan iyadoo ku xidhan qorshaha la doortay O (lambarka diiwaanka shaqaalaha) ama O (tirada waaxyaha) kooxaynta iyo wixii la mid ah.

Way caddahay in xukunka sare ee fulinta uu ku kala duwanaan karo DBMS-yada kala duwan, laakiin kakanaanta sina uma beddeli doonto.

Hirgelinta la soo jeediyay, DBMS ee shaqaynaysa waxay soo saari doontaa hal subquery kaas oo xisaabin doona qiyamka loo baahan yahay waaxda, ka dibna ku biir miiska waaxda si aad magaca u hesho. Si kastaba ha ahaatee, hawl kasta, marka lagu dhawaaqayo, waxaa suurtogal ah in la dejiyo calaamad gaar ah oo MATERIALIsed ah. Nidaamku wuxuu si toos ah u abuuri doonaa goob u dhiganta hawl kasta oo noocaas ah. Marka la beddelo qiimaha shaqada, qiimaha goobta ayaa sidoo kale isbeddeli doona isla macaamilka. Marka la gelayo hawshan, goobta hore loo xisaabiyay ayaa la gelayaa.

Gaar ahaan, haddii aad u dejisay MATERIALISED hawlaha tirada shaqaalaha ΠΈ mushaharkaSum, ka dibna laba goobood ayaa miiska lagu dari doonaa liiska waaxaha, kuwaas oo kaydin doona tirada shaqaalaha iyo guud ahaan mushaharkooda. Mar kasta oo uu jiro isbeddel ku yimaada shaqaalaha, mushaharkooda ama xiriirka waaxda, nidaamku wuxuu si toos ah u beddeli doonaa qiyamka goobahan. Weydiinta sare waxay si toos ah u geli doontaa goobahan waxaana lagu fulin doonaa gudaha O (tirada waaxyaha).

Waa maxay xayiraadaha? Hal shay oo kaliya: shaqada noocan oo kale ah waa inay lahaataa tiro xaddidan oo qiyam ah oo gelinta taas oo qiimaheeda lagu qeexay. Haddii kale, waxay noqon doontaa mid aan suurtagal ahayn in la dhiso miis kaydiya dhammaan qiyamkiisa, sababtoo ah ma jiri karo miis leh tiro aan xadidnayn oo saf ah.

Tusaale:

employeesCount β€˜ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ ΡΠΎΡ‚Ρ€ΡƒΠ΄Π½ΠΈΠΊΠΎΠ² Ρ Π·Π°Ρ€ΠΏΠ»Π°Ρ‚ΠΎΠΉ > N’ (Department d, NUMERIC[10,2] N) = 
    GROUP SUM salary(Employee e) IF department(e) = d AND salary(e) > N;

Shaqadan waxaa lagu qeexay tiro aan xadidneyn oo qiyam ah N (tusaale ahaan, qiimo kasta oo xun ayaa ku habboon). Sidaa darteed, ma saari kartid MATERIALISED. Markaa tani waa xaddidaad macquul ah, maaha mid farsamo (taasi waa, ma aha sababtoo ah waanu fulin kari waynay). Haddii kale, ma jiraan wax xaddidaad ah. Waxaad isticmaali kartaa kooxaynta, kala-soocidda, IYO iyo AMA, QAYBINTA, soo noqnoqoshada, iwm.

Tusaale ahaan, dhibaatada 2.2 ee maqaalkii hore, waxaad ku dhejin kartaa MATERIALISED labada shaqo:

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;

Nidaamka laftiisa ayaa abuuri doona hal miis oo leh furayaal nooca Customer, Koorsada ΠΈ INTEGER, waxay ku dari doontaa laba goobood waxayna cusbooneysiin doontaa qiyamka goobta iyaga oo isbeddel kasta ah. Marka wicitaanada dheeraadka ah ee hawlahan la sameeyo, lama xisaabin doono, laakiin halkii qiyamka waxaa laga akhriyi doonaa meelaha u dhigma.

Isticmaalka habkan, waxaad, tusaale ahaan, ka takhalusi kartaa soo noqnoqoshada (CTE) markaad waydiiso. Gaar ahaan, tixgeli kooxaha samaysa geed iyaga oo isticmaalaya xidhiidhka ubadka/waalidka (koox kastaa waxay xidhiidh la leedahay waalidkeed):

parent = DATA Group (Group);

Xogta shaqaynaysa, caqliga dib u curashada waxa lagu qeexi karaa sidan soo socota:

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;

Tan iyo markii loogu talagalay shaqada waa Waalid waxaa lagu calaamadeeyay MATERIALISED, ka dib waxaa loo samayn doonaa miis ay ku jiraan laba fure (koox) waa Waalid run bay noqon doontaa oo keliya haddii furaha koowaad uu yahay ilmo kan labaad. Tirada galitaanka shaxdan waxay la mid noqon doontaa tirada kooxaha lagu dhufto celceliska qoto dheer ee geedka. Haddii aad u baahan tahay, tusaale ahaan, inaad tiriso tirada faracyada koox gaar ah, waxaad isticmaali kartaa shaqadan:

childrenCount (Group g) = GROUP SUM 1 IF isParent(Group child, g);

Ma jiri doonto CTE ku jirta weydiinta SQL. Taa beddelkeeda waxaa jiri doona koox fudud oo BY.

Isticmaalka habkan, waxa kale oo aad si fudud u dumin kartaa xogta xogta haddii loo baahdo:

CLASS Order 'Π—Π°ΠΊΠ°Π·';
date 'Π”Π°Ρ‚Π°' = DATA DATE (Order);

CLASS OrderDetail 'Π‘Ρ‚Ρ€ΠΎΠΊΠ° Π·Π°ΠΊΠ°Π·Π°';
order 'Π—Π°ΠΊΠ°Π·' = DATA Order (OrderDetail);
date 'Π”Π°Ρ‚Π°' (OrderDetail d) = date(order(d)) MATERIALIZED INDEXED;

Markaad wacdo shaqo taariikhda khadka dalabka, goobta uu ku yaal tusmaynta ayaa laga akhrin doonaa miiska oo leh xariiqyo habaysan. Marka taariikhda dalbashada ay isbedesho, nidaamka laftiisa ayaa si toos ah dib u xisaabin doona taariikhda aan caadiga ahayn ee khadka.

Faa'iidooyinka

Waa maxay habkan oo dhan? DBMS-yada caadiga ah, iyada oo aan dib loo qorin su'aalaha, horumariye ama DBA kaliya waxay bedeli karaan tusmooyinka, waxay go'aamin karaan tirakoobka oo u sheegi karaan qorsheeeyaha sida loo fuliyo iyaga (iyo HINT-yada waxaa lagu heli karaa DBMS-yada ganacsiga oo kaliya). Si kasta oo ay isugu dayaan, ma awoodi doonaan in ay dhammaystiraan weydiinta koowaad ee maqaalka O (tirada waaxyaha) adoon bedelin su'aalaha ama ku darin kicinta. Qorshaha la soo jeediyay, heerka horumarinta uma baahnid inaad ka fikirto qaab dhismeedka kaydinta xogta iyo isugeynta la isticmaalayo. Waxaas oo dhan si fudud ayaa loo beddeli karaa duullimaad, si toos ah hawlgalka.

Ficil ahaan waxay u egtahay sidan. Dadka qaarkiis waxay si toos ah u horumariyaan caqli-galnimada iyagoo ku salaysan hawsha ay hayaan. Ma fahmaan algorithms-yada iyo kakankooda, ama qorshayaasha fulinta, ama noocyada ku biirista, ama qayb farsamo oo kale. Dadkani waxay ka badan yihiin falanqeeyayaasha ganacsiga marka loo eego kuwa horumariya. Kadib, waxaas oo dhan waxay galayaan tijaabo ama hawlgal. Waxay sahlaysa gelidda su'aalaha muddada dheer socda. Marka su'aal dheer la ogaado, markaas dad kale (farsamo badan - asal ahaan DBA) waxay go'aansadaan inay awood u siiyaan MATERIALIZED hawl dhexdhexaad ah. Tani waxay yaraynaysaa duubista wax yar (maadaama ay u baahan tahay cusboonaysiinta goob dheeraad ah oo ku saabsan wax kala iibsiga). Si kastaba ha ahaatee, ma aha oo kaliya su'aashan si weyn loo dedejiyey, laakiin sidoo kale dhammaan kuwa kale ee isticmaala shaqadan. Isla mar ahaantaana, go'aaminta shaqada si ay u hirgasho way fududahay. Laba qaybood oo waaweyn: tirada qiimaha gelinta suurtogalka ah (tani waa inta diiwaanadu ku jiri doonaan miiska u dhigma), iyo inta jeer ee loo isticmaalo hawlaha kale.

Analogs

DBMS-yada ganacsi ee casriga ahi waxay leeyihiin habab la mid ah: MUUQAAL LA ISKU DHACAY OO LAGU SOO cusboonaysiiyay (Oracle) iyo MUUQAAL INDEXED (Microsoft SQL Server). Gudaha PostgreSQL, MUUQAALKA MATERIALISED laguma cusbooneysiin karo macaamil ganacsi, laakiin kaliya codsi (iyo xitaa xayiraad aad u adag), markaa ma tixgelineyno. Laakiin waxay qabaan dhibaatooyin dhowr ah oo si weyn u xaddidaya isticmaalkooda.

Marka hore, kaliya waxaad awood u yeelan kartaa wax-soo-saarka haddii aad hore u abuurtay ARAGTID joogto ah. Haddii kale, waa inaad dib u qortaa codsiyada soo hadhay si aad u gasho aragtida cusub ee la abuuray si aad u isticmaasho xaqiijintan. Ama ka tag wax walba sida ay yihiin, laakiin waxay noqon doontaa ugu yaraan waxtar lahayn haddii ay jiraan xog hore loo xisaabiyay, laakiin weydiimo badan mar walba ma isticmaalaan, laakiin dib u xisaabiya.

Marka labaad, waxay leeyihiin tiro badan oo xaddidaadyo ah:

Oracle

5.3.8.4 Xayiraadaha Guud ee Cusbooneysiinta Degdega ah

Weydiinta qeexidda aragtida la rumeeyey waxay u xaddidan tahay sida soo socota:

  • Aragtida dhabta ah waa inaysan ku jirin tixraacyo tibaaxaha aan soo noqnoqoneynin sida SYSDATE iyo ROWNUM.
  • Aragtida dhabta ah waa inaysan ku jirin tixraacyo RAW or LONG RAW noocyada xogta.
  • Kuma koobna a SELECT liiska hoose.
  • Kuma koobna hawlo gorfayneed (tusaale ahaan, RANK) ee SELECT qawaaniinta.
  • Ma tixraaci karo miis uu a XMLIndex index waa la qeexay.
  • Kuma koobna a MODEL qawaaniinta.
  • Kuma koobna a HAVING faqrad leh subquery.
  • Kuma koobna su'aalo buul leh oo leh ANY, ALL, ama NOT EXISTS.
  • Kuma koobna a [START WITH …] CONNECT BY qawaaniinta.
  • Kuma koobnaan karo jadwal faahfaahsan oo badan oo goobo kala duwan ah.
  • ON COMMIT Aragtiyo dhab ah ma yeelan karaan miisas tafatiran oo fog.
  • Aragtida dhabta ah ee la daboolay waa inay lahaadaan isku-dar ama wadar.
  • Materialized ku biirida aragtiyada oo la rumeeyay wadar aragtiyo leh a GROUP BY faqraddu kama dooran karto shaxda habaysan.

5.3.8.5

Qeexidda weydiimaha aragtiyaha dhabta ah ee ku biiraya oo kaliya oo aan lahayn wax wadar ah oo leh xannibaadaha soo socda ee dib u cusboonaysiinta degdega ah:

  • Dhammaan xayiraadaha ka yimid Β«Xayiraadaha Guud ee Cusbooneysii Degdega ahΒ«.
  • Ma yeelan karaan GROUP BY Qodobbada ama wadar ahaan.
  • Safka dhammaan miisaska ku yaal FROM liisku waa inuu ka soo baxaa SELECT liiska weydiinta.
  • Qoraallada aragga la sameeyay waa in ay ku jiraan safafka dhammaan miisaska saldhigga ee ku yaal FROM liiska weydiinta.
  • Ma abuuri kartid muuqaal dib loo cusbooneysiin karo oo degdeg ah oo laga soo qaatay miisyo badan oo leh isku xidhyo fudud oo ay ku jiraan tiirka nooca shay ee SELECT hadal.

Sidoo kale, habka dib-u-cusboonaysiinta ee aad dooratay si fiican uma shaqayn doono haddii:

  • Weydiinta qeexeysa waxay isticmaashaa isku xidhka dibadda oo u dhaqma sida ku biirista gudaha. Haddii waydiinta qeexidu ay ka kooban tahay ku biiristan, ka fiirso inaad dib u qorto waydiinta qeexan si ay ugu jirto ka mid noqoshada gudaha.
  • The SELECT Liiska aragtida la mariyey waxa uu ka kooban yahay tibaaxo tiirar ah oo laga soo qaatay miisyo badan.

5.3.8.6 Xayiraadaha Cusbooneysiinta Degdega ah ee Aragtiyada Maaddooyinka leh

Qeexidda weydiimaha aragtiyaha dhabta ah ee la isku daray ama ku biirista ayaa leh xannibaadaha soo socda ee dib u cusboonaysiinta degdega ah:

Dib-u-cusbooneysiin degdeg ah ayaa la taageeray labadaba ON COMMIT iyo ON DEMAND aragtiyo dhab ah, si kastaba ha ahaatee xaddidaadaha soo socda ayaa khuseeya:

  • Dhammaan jadwallada ku jira aragtida la sameeyay waa in ay lahaadaan qoraallo wax-arag ah, iyo qoraallada aragga la sameeyay waa in:
    • Ka koobna dhammaan tiirarka shaxda lagu tixraacay aragtida dhabta ah.
    • Ku qeex ROWID iyo INCLUDING NEW VALUES.
    • Tix galka SEQUENCE faqraddu haddii miiska la filayo in uu yeesho isku-dar gelin/rarar toos ah, tirtirid, iyo cusbooneysiin.

  • Kaliya SUM, COUNT, AVG, STDDEV, VARIANCE, MIN iyo MAX waxaa lagu taageeray dib u cusboonaysiin degdeg ah.
  • COUNT(*) waa in la qeexaa.
  • Hawlaha isku-darka ahi waa inay u dhacaan oo keliya sida qaybta bannaanka ee odhaahda. Taasi waa, wadar ahaan sida AVG(AVG(x)) or AVG(x)+ AVG(x) lama ogola.
  • Isku geyn kasta sida AVG(expr), u dhiganta COUNT(expr) waa in ay joogaan. Oracle wuxuu ku talinayaa taas SUM(expr) lagu tilmaamo.
  • If VARIANCE(expr) or STDDEV(expr) waa la cayimay, COUNT(expr) iyo SUM(expr) waa in la qeexaa. Oracle wuxuu ku talinayaa taas SUM(expr *expr) lagu tilmaamo.
  • The SELECT tiirka ku jira weydiinta qeexida ma noqon karto odhaah adag oo leh tiirar ka soo jeeda miisas badan oo sal ah. Ka-hortagga suurtogalka ah ee tan waa in la isticmaalo muuqaal la sameeyay.
  • The SELECT liisku waa inuu ka kooban yahay dhammaan GROUP BY tiirarka.
  • Aragtida la sameeyay kuma salaysna hal ama in ka badan miisas fog.
  • Haddii aad isticmaasho a CHAR nooca xogta ee tiirarka shaandhada ee log aragga agabka la sameeyay, jilayaasha goobta sayidku iyo aragtida la sameeyay waa inay isku mid ahaadaan.
  • Haddii aragtida la maaday ay leedahay mid ka mid ah kuwan soo socda, markaa dib u cusboonaysiinta degdega ah ayaa lagu taageerayaa oo keliya gelinta caadiga ah ee DML iyo culaysyada tooska ah.
    • Aragtiyo qalabaysan oo leh MIN or MAX isku darka
    • Aragtiyo wax-ku-ool ah oo leh SUM(expr) laakiin maya COUNT(expr)
    • Aragtida maadiga ah oo aan lahayn COUNT(*)

    Aragtida dhabta ah ee noocan oo kale ah waxaa loo yaqaannaa muuqaal la galiyay oo kaliya.

  • Aragti dhab ah oo leh MAX or MIN si dhakhso leh ayaa loo cusboonaysiin karaa ka dib markii la tirtiro ama la isku daray weedhaha DML haddii aanay lahayn a WHERE qawaaniinta.
    Ugu badnaan/daqiiqo dib u cusbooneeysiis degdeg ah ka dib tirtirid ama isku qasan DML ma laha habdhaqan la mid ah kiis gelinta-kaliya. Waxay tirtirtaa oo dib u xisaabisaa qiyamka ugu sarreeya ee kooxaha ay saamaysay. Waxaad u baahan tahay inaad ka warqabto saamaynta waxqabadkeeda.
  • Aragti la sameeyay oo leh aragtiyo magac leh ama su'aalo hoose oo ku jira FROM Qodobka si dhakhso ah ayaa loo cusbooneysiin karaa waa haddii aragtiyaha la isku dari karo. Macluumaad ku saabsan aragtida la isku dari doono, eeg Oracle Database SQL Tixraaca Luuqadda.
  • Haddii aysan jirin ku-biisyo dibadda ah, waxaa laga yaabaa inaad yeelato doorashooyin aan sabab lahayn oo aad ku biirto WHERE qawaaniinta.
  • Aragtida isku-darka walxaha leh ee ku biirista dibadda si degdeg ah ayaa loo cusboonaysiin karaa ka dib DML caadiga ah iyo culeyska tooska ah, waase haddii miiska dibadda wax laga beddelay. Sidoo kale, caqabado gaar ah waa inay ku jiraan tiirarka isku-xidhka ee miiska isku-xidhka gudaha. Haddii ay jiraan xidhidooyin dibadda ah, dhammaan xidhmooyinka waa in lagu xidhaa ANDs waana inay isticmaalaan sinnaanta (=) hawlwadeen.
  • Wixii aragtiyo dhab ah oo leh CUBE, ROLLUP, kooxaynta kooxaynta, ama isku xidhkooda, xayiraadaha soo socdaa way jiraan:
    • The SELECT liisku waa inuu ka kooban yahay kala saar kooxeed kaas oo noqon kara a GROUPING_ID shaqada oo dhan GROUP BY tibaaxaha ama GROUPING mid kasta u shaqeeya GROUP BY muujin. Tusaale ahaan, haddii ay GROUP BY qodobka aragtida dhabta ah waa "GROUP BY CUBE(a, b)", ka dibna SELECT liisku waa inuu ka kooban yahay midkood"GROUPING_ID(a, b)Β» ama Β«GROUPING(a) AND GROUPING(b)Β» si aragtida la mariyey ay u noqoto mid degdeg ah oo dib loo cusboonaysiin karo.
    • GROUP BY ma aha in ay ka dhashaan kooxaysiyo nuqul ah. Tusaale ahaan, "GROUP BY a, ROLLUP(a, b)"ma aha mid degdeg ah dib loo cusboonaysiin karo sababtoo ah waxay keentaa kooxaysiyo nuqul ah"(a), (a, b), AND (a)Β«.

5.3.8.7 Xayiraadaha dib u cusboonaysiinta degdega ah ee aragtida agabka leh ee UNION ALL

Aragtiyo qalabaysan oo leh UNION ALL taageero hawlwadeenka REFRESH FAST ikhtiyaarka ah haddii shuruudaha soo socda lagu qanco:

  • Weydiinta qeexan waa inay lahaataa UNION ALL hawlwadeenka heerka ugu sarreeya.

    The UNION ALL hawl wadeenka laguma dhejin karo gudaha subquery, marka laga reebo: The UNION ALL waxay noqon kartaa in subquery ah ee FROM Qodobka waa haddii su'aasha qeexideedu ay tahay foomka SELECT * FROM (ku arag ama la xidhiidh UNION ALL) sida tusaale ahaan:

    Abuur muuqaal muuqaal leh_unionall AS (Dooro c.rowid crid, c.cust_id, 2 umarker ee macaamiisha c WHERE c.cust_last_name = 'Smith' UNION DHAMMAAN SELECT c.rowid crid, c.cust_id, 3 umarker FROM name macaamiisha c = WHERE c.cust_last_name 'Jones'); U ABUUR MUUQAAL LAGU SAMEEYEY ARAGGAL_ dhammaan_inside_view_mv si deg deg ah u cusboonaysii dalbashada SIDII loo xushay
    

    Ogow in aragtida view_with_unionall qanciya shuruudaha dib u cusboonaysiinta degdega ah.

  • Su'aal kasta oo ku jirta UNION ALL weydiintu waa in ay buuxisaa shuruudaha muuqaal muuqaal ah oo degdeg ah oo la cusboonaysiin karo oo leh wadaryo ama muuqaal la cusbooneysiin karo oo degdeg ah oo isku xidhan.

    Qoraallada muuqaalka la sameeyay ee ku habboon waa in lagu abuuraa miisaska sida loogu baahan yahay nooca u dhigma ee muuqaalka la cusbooneysiiyay ee degdegga ah.
    Ogsoonow in Xogta Oracle ay sidoo kale ogolaato kiiska gaarka ah ee hal miis oo muuqaal ah oo la taaban karo oo ay weheliso kaliya marka la bixiyo ROWID tiirka ayaa lagu daray SELECT liiska iyo in log aragga materialized. Tan waxa lagu muujiyay weydiinta qeexida aragtida view_with_unionall.

  • The SELECT liiska su'aal kasta waa in ay ku jiraan a UNION ALL calaamadeeyaha, iyo UNION ALL tiirku waa inuu lahaadaa tiro joogto ah ama xardhan mid kasta UNION ALL laan. Dheeraad ah, tiirka calaamadeeyaha waa inuu ka soo baxaa isla booska caadiga ah ee ku yaal SELECT liiska su'aal kasta block. eeg"UNION DHAMMAAN calaamadeeyaha oo dib u qorΒ» wixii macluumaad dheeraad ah ee ku saabsan UNION ALL calaamadaha.
  • Astaamaha qaarkood sida ku biirista dibadda, gelinta-keliya isugaynta aragtiyo la sameeyay iyo miisaska fog-fog laguma taageero aragtiyaha dhabta ah UNION ALL. Ogow, si kastaba ha ahaatee, in aragtiyaha dhabta ah ee loo isticmaalo ku celcelinta, kuwaas oo aan ku jirin isku-darka ama isku-darka, si degdeg ah loo cusboonaysiin karo marka UNION ALL ama miisaska fog ayaa la isticmaalaa.
  • Halbeegga iswaafajinta waa in la dejiyaa 9.2.0 ama ka sareeya si loo abuuro muuqaal la soo celin karo oo degdeg ah UNION ALL.

Ma doonayo in aan u xumeeyo taageerayaasha Oracle, laakiin garsoore by liiska xayiraadaha, waxay u muuqataa in habkan aan la qorin kiiska guud, iyadoo la isticmaalayo nooc ka mid ah model ah, laakiin kumanaan Hindi ah, halkaas oo qof kasta la siiyey fursad ay ku. laantooda qor, mid kastaana wuxuu samayn karayey wuu sameeyey. Isticmaalka habkan macquulnimada dhabta ah waxay la mid tahay in lagu dhex socdo goob miinada ah. Waxaad heli kartaa miino wakhti kasta adoo garaacaya mid ka mid ah xannibaadaha aan caddayn. Sida ay u shaqeyso sidoo kale waa su'aal gaar ah, laakiin waa ka baxsan xadka maqaalkan.

Microsoft SQL Server

Shuruudo dheeraad ah

Marka lagu daro xulashooyinka SET iyo shuruudaha shaqada go'aaminta, shuruudaha soo socda waa in la buuxiyaa:

  • Isticmaalaha fulinaya CREATE INDEX waa inuu noqdaa mulkiilaha aragtida.
  • Markaad abuurto tusmada, IGNORE_DUP_KEY doorashada waa in la dejiyaa OFF
  • Shaxda waa in lagu tixraacaa magacyo laba qaybood ka kooban, shema.magaca miiska qeexidda aragtida.
  • Hawlaha isticmaale-qeexay ee lagu tilmaamay aragtida waa in la abuuraa iyadoo la isticmaalayo WITH SCHEMABINDING doorasho.
  • Hawl kasta oo isticmaale-qeexay ee lagu tixraacay aragtida waa in lagu tixraacaa magacyo laba qaybood ka kooban, ..
  • Hantida gelitaanka xogta ee shaqada isticmaaluhu waa inay noqotaa NO SQL, iyo hantida gelitaanka dibadda waa in ay ahaataa NO.
  • Hawlaha runtime luqadda caadiga ah (CLR) waxay ka soo muuqan karaan liiska xulashada ee aragtida, laakiin ma noqon karaan qayb ka mid ah qeexida furaha tusmada la ururiyey. Hawlaha CLR kama soo bixi karaan meesha aragtida ama qodobka ON ee hawlgalka ku biir aragtida.
  • Hawlaha CLR iyo hababka CLR ee isticmaala-qeexay noocyada loo isticmaalo qeexida aragtida waa in ay lahaadaan sifooyinka loo dejiyay sida shaxdan soo socota ku cad.

    Property
    note

    DETERMINISTIC = RUN
    Waa in si cad loogu dhawaaqaa sifo ka mid ah habka Microsoft .NET Framework.

    Sax = RUN
    Waa in si cad loogu dhawaaqaa sifo habka .NET Framework.

    Helitaanka XOGTA = SQL ma jiro
    Waxaa lagu go'aamiyay in la dejiyo sifo DataAccess ee DataAccessKind.None iyo SystemDataAccess sifada SystemDataAccessKind.None.

    GALINTA DIBADDA = MAYA
    Gurigan waxa uu u dhigan yahay MAYA ee hawlaha joogtada ah ee CLR.

  • Aragtida waa in la abuuraa iyadoo la isticmaalayo WITH SCHEMABINDING doorasho.
  • Aragtidu waa inay tixraacdaa kaliya jaantusyada aasaasiga ah ee ku jira xogta la mid ah aragtida. Aragtidu ma tixraaci karto aragtiyo kale.
  • Bayaanka SELECT ee qeexida aragtida waa in aanu ku jirin walxaha Transact-SQL ee soo socda:

    COUNT
    Hawlaha ROWSETOPENDATASOURCE, OPENQUERY, OPENROWSET, IYO OPENXML)
    OUTER ku biira (LEFT, RIGHT, ama FULL)

    Shaxda la soo saaray (waxaa lagu qeexay iyadoo lagu qeexay a SELECT bayaanka FROM qodob)
    Isku-biirsanaanta
    Tilmaamida tiirarka adoo isticmaalaya SELECT * or SELECT <table_name>.*

    DISTINCT
    STDEV, STDEVP, VAR, VARP, ama AVG
    Tibaaxaha miiska caadiga ah (CTE)

    fadlan1, text, qoraalka, image, XML, ama faylalka columns
    Is-weydiinta
    OVER faqrad, kaas oo ay ku jiraan darajooyinka ama isku geynta hawlaha daaqada

    Saadaasha qoraalka buuxa (CONTAINS, FREETEXT)
    SUM shaqo tixraacaysa odhaah aan waxba ka jirin
    ORDER BY

    Shaqada guud ee isticmaale-qeexay ee CLR
    TOP
    CUBE, ROLLUP, ama GROUPING SETS Wadayaasha

    MIN, MAX
    UNION, EXCEPT, ama INTERSECT Wadayaasha
    TABLESAMPLE

    Doorsoomayaasha shaxda
    OUTER APPLY or CROSS APPLY
    PIVOT, UNPIVOT

    Tiirar aan badnayn
    Inline (TVF) ama hawlo miis-qiimo leh oo bayaan ah (MSTVF)
    OFFSET

    CHECKSUM_AGG

    1 Aragtida la calaamadeeyay waxa ku jiri kara fadlan tiirar; si kastaba ha ahaatee, tiirarka noocan oo kale ah laguma dari karo furaha tusmada ee urursan.

  • If GROUP BY waa joogaa, qeexida ARAGTIDA waa inay ka kooban tahay COUNT_BIG(*) waana in aanu ku jirin HAVING. Kuwani GROUP BY xaddidaadaha ayaa lagu dabaqi karaa oo kaliya qeexida aragtida la calaamadeeyay. Weydiintu waxay isticmaali kartaa aragti la tilmaansan yahay ee qorshaheeda fulinta xitaa haddii aysan ku qancin kuwan GROUP BY xannibaadaha.
  • Haddii qeexida aragtida ay ka kooban tahay a GROUP BY faqrad, furaha tusmada kooxaysan ee gaarka ah waxay tixraaci karaan oo keliya tiirarka lagu cayimay GROUP BY qawaaniinta.

Way cadahay halkan in Hindida aysan ku lug lahayn, maadaama ay go'aansadeen inay u sameeyaan si waafaqsan nidaamka "wax yar ayaan qaban doonnaa, laakiin si fiican." Taasi waa, waxay leeyihiin miinooyin badan oo garoonka ah, laakiin meesha ay ku yaalaan waa mid hufan. Waxa ugu niyad jabka badan waa xaddidan:

Aragtidu waa inay tixraacdaa kaliya jaantusyada aasaasiga ah ee ku jira xogta la mid ah aragtida. Aragtidu ma tixraaci karto aragtiyo kale.

Eray-bixinteena, tani waxay ka dhigan tahay in shaqadu aanay geli karin hawl kale oo dhab ah. Tani waxay hoos u dhigeysaa dhammaan fikradaha ku jira birta.
Sidoo kale, xaddidan (iyo inbadan oo qoraalka ah) waxay si weyn u yaraynaysaa kiisaska isticmaalka:

Bayaanka SELECT ee qeexida aragtida waa in aanu ku jirin walxaha Transact-SQL ee soo socda:

COUNT
Hawlaha ROWSETOPENDATASOURCE, OPENQUERY, OPENROWSET, IYO OPENXML)
OUTER ku biira (LEFT, RIGHT, ama FULL)

Shaxda la soo saaray (waxaa lagu qeexay iyadoo lagu qeexay a SELECT bayaanka FROM qodob)
Isku-biirsanaanta
Tilmaamida tiirarka adoo isticmaalaya SELECT * or SELECT <table_name>.*

DISTINCT
STDEV, STDEVP, VAR, VARP, ama AVG
Tibaaxaha miiska caadiga ah (CTE)

fadlan1, text, qoraalka, image, XML, ama faylalka columns
Is-weydiinta
OVER faqrad, kaas oo ay ku jiraan darajooyinka ama isku geynta hawlaha daaqada

Saadaasha qoraalka buuxa (CONTAINS, FREETEXT)
SUM shaqo tixraacaysa odhaah aan waxba ka jirin
ORDER BY

Shaqada guud ee isticmaale-qeexay ee CLR
TOP
CUBE, ROLLUP, ama GROUPING SETS Wadayaasha

MIN, MAX
UNION, EXCEPT, ama INTERSECT Wadayaasha
TABLESAMPLE

Doorsoomayaasha shaxda
OUTER APPLY or CROSS APPLY
PIVOT, UNPIVOT

Tiirar aan badnayn
Inline (TVF) ama hawlo miis-qiimo leh oo bayaan ah (MSTVF)
OFFSET

CHECKSUM_AGG

KU BIIRKA DIBADDA, URURKA, AMARKA IYO kuwa kale waa mamnuuc. Waxaa laga yaabaa inay fududaan lahayd in la qeexo waxa la isticmaali karo halkii aan la isticmaali karin. Liistadu waxay u badan tahay inay aad uga yaraan lahayd.

Si loo soo koobo: xaddidaadyo aad u weyn oo mid kasta ah (aan ogaano ganacsiga) DBMS vs midna (marka laga reebo hal macquul ah, ma aha farsamo) tignoolajiyada LGPL. Si kastaba ha ahaatee, waa in la ogaadaa in hirgelinta habkan marka loo eego macquulnimada la xiriirta ay xoogaa ka adag tahay marka loo eego caqli-galnimada la tilmaamay.

РСализация

Sidee u shaqeysaa? PostgreSQL waxaa loo isticmaalaa sidii "mashiinka dhabta ah". Waxaa jira algorithm kakan gudaha kaas oo dhisa weydiimaha. Halkan koodh isha. Oo ma jiraan oo kaliya set weyn oo heuristics leh farabadan ifs. Markaa, haddii aad haysato laba bilood oo aad wax ku baranayso, waxaad isku dayi kartaa inaad fahamto naqshadaha.

Si hufan ma u shaqeysaa? Aad waxtar u leh. Nasiib darro, tani way adag tahay in la caddeeyo. Kaliya waxaan dhihi karaa haddii aad tixgeliso kumanaanka su'aalood ee ku jira codsiyada waaweyn, markaa celcelis ahaan waxay ka waxtar badan yihiin kuwa horumariyaha wanaagsan. Barnaamij-yaqaanka SQL-ga ah ayaa si hufan u qori kara su'aal kasta, laakiin kun su'aalood si fudud uma heli doono dhiirigelin ama waqti uu ku sameeyo. Waxa kaliya ee aan hadda u soo qaadan karo caddaynta waxtarka ayaa ah in dhowr mashruuc ay ka shaqeynayaan madal lagu dhisay DBMS Nidaamyada ERP, kaas oo leh kumanaan hawlood oo kala duwan oo MATERIALIZED ah, oo leh kumanaan isticmaale iyo keydka xogta terabyte oo leh boqolaal milyan oo rikoodh ah oo ku shaqeeya server-ka caadiga ah ee laba-processor. Si kastaba ha noqotee, qof kastaa wuu hubin karaa / diidi karaa waxtarka isagoo soo dejinaya madal iyo PostgreSQL, shidan gelida su'aalaha SQL oo isku dayaya in ay beddelaan macquulka iyo xogta halkaas.

Maqaallada soo socda, waxaan sidoo kale ka hadli doonaa sida aad u dejin karto xaddidaadyada shaqooyinka, la shaqeynta fadhiyada isbeddelka, iyo wax ka badan.

Source: www.habr.com

Add a comment