Balancing e ngola le ho bala polokelong ea litaba

Balancing e ngola le ho bala polokelong ea litaba
Nakong e fetileng sehlooho Ke hlalositse mohopolo le ts'ebetsong ea polokelo ea boitsebiso e hahiloeng motheong oa mesebetsi, ho e-na le litafole le masimo joalo ka li-database tsa likamano. E fane ka mehlala e mengata e bontšang melemo ea mokhoa ona ho feta oa khale. Ba bangata ba ile ba fumana ba sa kholisehe ka ho lekaneng.

Sehloohong sena, ke tla bontša kamoo khopolo ena e u lumellang hore u potlakele le ka mokhoa o bonolo ho leka-lekanya ho ngola le ho bala ho database ntle le phetoho leha e le efe ea logic ea ts'ebetso. Ts'ebetso e ts'oanang e lekiloe ho kengoa ts'ebetsong ho li-DBMS tsa sejoale-joale tsa khoebo (haholo-holo, Oracle le Microsoft SQL Server). Qetellong ea sehlooho ke tla bontša hore seo ba se entseng, ho se beha ka bonolo, ha sea ka sa sebetsa hantle haholo.

tlhaloso

Joalo ka pele, ho utloisisa hamolemo ke tla qala tlhaloso ka mehlala. Ha re re re hloka ho kenya tšebetsong logic e tla khutlisa lethathamo la mafapha le palo ea basebetsi ho ona le meputso ea bona kaofela.

Ho database e sebetsang e ka shebahala tjena:

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

Ho rarahana ha ho etsa potso ena ho DBMS efe kapa efe ho tla lekana le O(palo ea basebetsi)hobane palo ena e hloka hore ho hlahlojoe tafole eohle ea basebetsi ebe e ba arola ka lihlopha. Hape ho tla ba le tlatsetso e nyane (re lumela hore ho na le basebetsi ba bangata ho feta mafapha) ho latela moralo o khethiloeng O(nomoro ea lenane la basebetsi) kapa O(palo ea mafapha) bakeng sa lihlopha joalo-joalo.

Ho hlakile hore ts'ebetso ea ts'ebetso e kanna ea fapana ho li-DBMS tse fapaneng, empa ho rarahana ho ke ke ha fetoha ka tsela efe kapa efe.

Ts'ebetsong e reriloeng, DBMS e sebetsang e tla hlahisa subquery e le 'ngoe e tla bala litekanyetso tse hlokahalang bakeng sa lefapha, ebe e etsa JOIN le tafole ea lefapha ho fumana lebitso. Leha ho le joalo, bakeng sa ts'ebetso e 'ngoe le e' ngoe, ha ho phatlalatsoa, ​​hoa khoneha ho beha letšoao le khethehileng la MATERIALIZED. Sistimi e tla iketsetsa sebaka se tsamaisanang le mosebetsi o mong le o mong o joalo. Ha u fetola boleng ba ts'ebetso, boleng ba tšimo bo tla boela bo fetohe ts'ebetsong e tšoanang. Ha u fihlella ts'ebetso ena, sebaka se baliloeng esale pele se tla fumaneha.

Haholo-holo, haeba u seta MATERIALIZED bakeng sa mesebetsi palo ea Basebetsi и salarySm, joale masimo a mabeli a tla kenyelletsoa tafoleng le lenane la mafapha, a tla boloka palo ea basebetsi le moputso oa bona kaofela. Nako le nako ha ho na le phetoho ho basebetsi, meputso ea bona kapa litšebelisano tsa lefapha, sistimi e tla fetola boleng ba likarolo tsena ka bo eona. Potso e kaholimo e tla fihlella likarolo tsena ka kotloloho 'me e tla etsoa ho eona O(palo ea mafapha).

Lithibelo ke life? Ntho e le 'ngoe feela: ts'ebetso e joalo e tlameha ho ba le palo e lekanyelitsoeng ea litekanyetso tsa ho kenya tseo boleng ba eona bo hlalosoang. Ho seng joalo, ho ke ke ha khoneha ho haha ​​​​tafole e bolokang litekanyetso tsohle tsa eona, kaha ho ke ke ha e-ba le tafole e nang le palo e sa lekanyetsoang ea mela.

Mohlala:

employeesCount ‘Количество сотрудников с зарплатой > N’ (Department d, NUMERIC[10,2] N) = 
    GROUP SUM salary(Employee e) IF department(e) = d AND salary(e) > N;

Mosebetsi ona o hlalosoa bakeng sa palo e sa feleng ea boleng ba N (mohlala, boleng bofe kapa bofe bo fosahetseng bo loketse). Ka hona, u ke ke ua beha MATERIALIZED ho eona. Kahoo sena ke moeli o utloahalang, eseng oa tekheniki (ke hore, eseng hobane re sitiloe ho o phethahatsa). Ho seng joalo, ha ho na lithibelo. U ka sebelisa lihlopha, ho hlopha, LE le KAPA, KAROLO, boipheto, joalo-joalo.

Mohlala, bothateng ba 2.2 ba sengoloa se fetileng, o ka beha MATERIALIZED mesebetsing ka bobeli:

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;

Sistimi ka boeona e tla theha tafole e le 'ngoe e nang le linotlolo tsa mofuta Customer, Product и SEBELETSI, e tla eketsa likarolo tse peli ho eona mme e tla ntlafatsa boleng ba tšimo ho eona ka liphetoho leha e le life. Ha mehala e meng ea mesebetsi ena e etsoa, ​​​​e ke ke ea baloa, empa ho e-na le hoo, litekanyetso li tla baloa ho tsoa libakeng tse tsamaellanang.

U sebelisa mochine ona, ka mohlala, u ka tlosa recursions (CTE) ka lipotso. Haholo-holo, nahana ka lihlopha tse etsang sefate ho sebelisa kamano ea ngoana / motsoali (sehlopha ka seng se na le sehokelo ho motsoali oa sona):

parent = DATA Group (Group);

Ka database e sebetsang, logic ea recursion e ka hlalosoa ka tsela e latelang:

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;

Ho tloha bakeng sa tshebetso isParent e tšoailoe MATERIALIZED, ebe tafole e nang le linotlolo tse peli (lihlopha) e tla etsoa bakeng sa eona, moo tšimo isParent e tla ba 'nete hafeela senotlolo sa pele e le ngoana oa bobeli. Palo ea likhakanyo tafoleng ena e tla lekana le palo ea lihlopha tse atolositsoeng ka botebo bo tloaelehileng ba sefate. Haeba u hloka, mohlala, ho bala palo ea litloholo tsa sehlopha se itseng, u ka sebelisa mosebetsi ona:

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

Ha ho na ho ba le CTE potsong ea SQL. Ho ena le hoo ho tla ba le bonolo GROUP BY.

U sebelisa mochine ona, u ka boela ua senya database habonolo ha ho hlokahala:

CLASS Order 'Заказ';
date 'Дата' = DATA DATE (Order);

CLASS OrderDetail 'Строка заказа';
order 'Заказ' = DATA Order (OrderDetail);
date 'Дата' (OrderDetail d) = date(order(d)) MATERIALIZED INDEXED;

Ha o bitsa tshebetso letsatsi bakeng sa mola oa taelo, tšimo eo ho eona ho nang le index e tla baloa ho tloha tafoleng ka mela ea taelo. Ha letsatsi la odara le fetoha, sisteme ka boeona e tla bala ka bo eona letsatsi le sa tloaelehang moleng.

le menyetla

Mochini oo kaofela ke oa eng? Ho li-DBMS tsa khale, ntle le lipotso tsa ho ngola bocha, moqapi kapa DBA a ka fetola li-index feela, a fumana lipalo-palo mme a bolelle moralo oa lipotso hore na a li phethise joang ('me HINTs e fumaneha feela ho li-DBMS tsa khoebo). Ho sa tsotellehe hore na ba leka ka matla hakae, ba ke ke ba khona ho tlatsa potso ea pele sehloohong se ka O (palo ea mafapha) ntle le ho fetola dipotsiso kapa ho eketsa mahlasedi. Lenaneong le reriloeng, sethaleng sa nts'etsopele ha ua tlameha ho nahana ka sebopeho sa polokelo ea data le hore na ke li-aggregations life tse lokelang ho sebelisoa. Sena sohle se ka fetoloa habonolo ha se fofa, se sebetsa ka kotloloho.

Ka ts'ebetso e shebahala tjena. Batho ba bang ba hlahisa logic ka ho toba ho latela mosebetsi oo ba o etsang. Ha ba utloisise li-algorithms le ho rarahana ha bona, kapa merero ea ts'ebetso, kapa mefuta ea li-join, kapa karolo efe kapa efe ea tekheniki. Batho bana ke bahlahlobisisi ba khoebo ho feta bahlahisi. Joale, tsena tsohle li kena tekong kapa ts'ebetsong. E nolofalletsa ho rengoa ha lipotso tsa nako e telele. Ha potso e telele e fumanoa, joale batho ba bang (ho feta tekheniki - ha e le hantle DBA) ba nka qeto ea ho lumella MATERIALIZED ts'ebetsong e itseng ea mahareng. Sena se liehisa ho rekota hanyenyane (kaha ho hloka ho ntlafatsa sebaka se eketsehileng khoebong). Leha ho le joalo, ha se potso ena feela e potlakisang haholo, empa le tse ling kaofela tse sebelisang mosebetsi ona. Ka nako e ts'oanang, ho bonolo ho etsa qeto ea hore na ke mosebetsi ofe o lokelang ho etsoa. Mekhahlelo e 'meli e meholo: palo ea litekanyetso tse ka khonehang tsa ho kenya (hona ke hore na ho tla ba le litlaleho tse kae tafoleng e lumellanang), le hore na e sebelisoa hangata hakae mesebetsing e meng.

Li-analog

Li-DBMS tsa sejoale-joale tsa khoebo li na le mekhoa e ts'oanang: PONO EA MATERIALIZED e nang le FAST REFRESH (Oracle) le INDEXED VIEW (Microsoft SQL Server). Ho PostgreSQL, MATERIALIZED VIEW e ke ke ea ntlafatsoa khoebong, empa feela ka kopo (esita le ka lithibelo tse thata), kahoo ha re e nahane. Empa ba na le mathata a 'maloa a fokotsang tšebeliso ea bona haholo.

Taba ea pele, u ka khona ho etsa lintho tse bonahalang feela haeba u se u thehile VIEW e tloaelehileng. Ho seng joalo, o tla tlameha ho ngola likopo tse setseng hape ho fihlella pono e ncha e entsoeng ho sebelisa mokhoa ona. Kapa tlohela ntho e 'ngoe le e' ngoe kamoo e leng kateng, empa bonyane e tla be e sa sebetse haeba ho na le lintlha tse itseng tse seng li balletsoe, empa lipotso tse ngata ha li sebelise kamehla, empa li bala hape.

Ea bobeli, ba na le palo e kholo ea lithibelo:

oracle

5.3.8.4 Lithibelo tse Akaretsang mabapi le ho Nchafatsa ka Potlako

Potso e hlalosang ea pono e entsoeng ke motho e thibetsoe ka tsela e latelang:

  • Pono e fetotsoeng ha ea lokela ho ba le litšupiso tsa lipolelo tse sa phete-phetoang joalo ka SYSDATE 'me ROWNUM.
  • Pono ea lintho tse bonahalang ha ea lokela ho ba le litšupiso tsa RAW or LONG RAW mefuta ea data.
  • E ke ke ea ba le a SELECT lethathamo la subquery.
  • E ke ke ea ba le mesebetsi ea tlhahlobo (mohlala, RANKho SELECT serapa.
  • E ke ke ea supa tafole eo ho eona XMLIndex index ea hlalosoa.
  • E ke ke ea ba le a MODEL serapa.
  • E ke ke ea ba le a HAVING poleloana e nang le subquery.
  • Ha e khone ho ba le lipotso tse teng ANY, ALL, kapa NOT EXISTS.
  • E ke ke ea ba le a [START WITH …] CONNECT BY serapa.
  • E ka se be le litafole tse ngata tsa lintlha libakeng tse fapaneng.
  • ON COMMIT maikutlo a bonahalang a ke ke a ba le litafole tsa lintlha tse hole.
  • Lipono tse entsoeng ka nama li tlameha ho kopanngoa kapa li kopane.
  • Maikutlo a kopanelo a lintho tse bonahalang le maikutlo a kopaneng a nang le a GROUP BY Clause e ke ke ea khetha tafoleng e hlophisitsoeng ea index.

5.3.8.5 Lithibelo ho Nchafatsoa ka Potlako ho Maikutlo a Sebopeho ka ho Kopanela Feela

Ho hlalosa lipotso bakeng sa maikutlo a fetotsoeng ka ho kopanya feela 'me ha ho na lihlopha tse nang le lithibelo tse latelang mabapi le ho tsosolosa ka potlako:

  • Lithibelo tsohle tse tsoang ho «Lithibelo tse Akaretsang mabapi le Tsosoloso e potlakileng".
  • Ba ke ke ba ba le GROUP BY likaroloana kapa kakaretso.
  • Mekoloko ea litafole tsohle ka har'a FROM lenane le tlameha ho hlaha ho SELECT lethathamo la potso.
  • Li-log tsa lintho tse bonahalang li tlameha ho ba le li-rowids bakeng sa litafole tsohle tsa motheo ho FROM lethathamo la potso.
  • U ke ke ua theha pono e nchafalitsoeng ka potlako ho tsoa litafoleng tse ngata tse nang le likhokahanyo tse bonolo tse kenyelletsang kholomo ea mofuta oa ntho ho SELECT setatemente se.

Hape, mokhoa oa ho khatholla oo u o khethang o ke ke oa sebetsa hantle haeba:

  • Potso e hlalosang e sebelisa sehokelo sa kantle se sebetsang joalo ka sehokelo sa kahare. Haeba potso e hlalosang e na le kopanyo e joalo, nahana ka ho ngola hape potso e hlalosang hore e na le kopanyo e ka hare.
  • The SELECT lethathamo la pono e entsoeng ka lintho tse bonahalang le na le lipolelo holim'a likholomo tse tsoang litafoleng tse ngata.

5.3.8.6 Lithibelo ho Nchafatsoa ka Potlako ho Maikutlo a Sebeletsoeng ka Aggregates

Ho hlalosa maikutlo a batho ka kakaretso kapa ho kopanngoa ho na le lithibelo tse latelang mabapi le ho nchafatsa kapele:

Ho khatholla kapele ho tšehetsoa ka bobeli ON COMMIT 'me ON DEMAND maikutlo a bonahatsoang, empa lithibelo tse latelang lia sebetsa:

  • Litafole tsohle tse ponong ea nama li tlameha ho ba le li-log tsa pono, 'me li-log tsa pono li tlameha ho ba:
    • E na le litšiea tsohle tse tsoang tafoleng e bonts'itsoeng ponong ea nama.
    • Hlalosa le ROWID 'me INCLUDING NEW VALUES.
    • Hlalosa SEQUENCE clause haeba tafole e lebelletsoe ho ba le motsoako oa ho kenya / meroalo e tobileng, ho hlakola, le lintlafatso.

  • feela SUM, COUNT, AVG, STDDEV, VARIANCE, MIN 'me MAX li tšehelitsoe bakeng sa ho khatholla kapele.
  • COUNT(*) e tlameha ho hlalosoa.
  • Kakaretso ea mesebetsi e tlameha ho etsahala feela joalo ka karolo e kantle ea polelo. Ke hore, aggregates joalo ka AVG(AVG(x)) or AVG(x)+ AVG(x) ha lia lumelloa.
  • Bakeng sa kakaretso e 'ngoe le e 'ngoe joalo ka AVG(expr), tse tsamaellanang COUNT(expr) e tlameha ho ba teng. Oracle o khothalletsa seo SUM(expr) ho hlalosoa.
  • If VARIANCE(expr) or STDDEV(expr) e hlalositsoe, COUNT(expr) 'me SUM(expr) e tlameha ho hlalosoa. Oracle o khothalletsa seo SUM(expr *expr) ho hlalosoa.
  • The SELECT kholomo potsong e ke ke ea ba polelo e rarahaneng e nang le likholomo ho tsoa ho litafole tse ngata tsa motheo. Tharollo e ka bang teng ho sena ke ho sebelisa pono e entsoeng sehlaha.
  • The SELECT lenane le tlameha ho ba le tsohle GROUP BY litšiea.
  • Pono e entsoeng ka nama ha ea itšetleha ka tafole e le 'ngoe kapa ho feta tse hole.
  • Haeba u sebelisa file ea CHAR mofuta oa data likholomong tsa filthara ea logi ea pono e fetotsoeng, sets'oants'o sa sebopeho sa sebaka se seholo le pono e entsoeng e tlameha ho tšoana.
  • Haeba pono ea nama e na le e 'ngoe ea tse latelang, joale ho tsosolosa ka potlako ho tšehetsoa feela ho tse tloaelehileng tsa DML le meroalo e tobileng.
    • Maikutlo a lintho tse bonahalang ka MIN or MAX lihlopha
    • Maikutlo a lintho tse bonahalang a nang le SUM(expr) empa che COUNT(expr)
    • Maikutlo a lintho tse bonahalang ntle le COUNT(*)

    Pono e joalo ea nama e bitsoa pono e kentsoeng feela ea nama.

  • Pono ea nama e nang le MAX or MIN e ka hlasimoloha kapele ka mor'a ho hlakola kapa ho tsoaka liphatlalatso tsa DML haeba e se na a WHERE serapa.
    Ho khatholla ka potlako ka mor'a ho hlakola kapa ho kopanngoa ha DML ha e na mokhoa o tšoanang le oa ho kenya feela. E hlakola le ho khutlisa boleng ba max/min bakeng sa lihlopha tse amehileng. U hloka ho tseba ka phello ea eona ea ts'ebetso.
  • Maikutlo a lintho tse bonahalang a nang le maikutlo a nang le mabitso kapa li-subqueries ho FROM clause e ka hlakisoa kapele ha feela maikutlo a ka kopanngoa ka botlalo. Bakeng sa tlhahisoleseling mabapi le hore na ke lipono life tse tla kopana, bona Oracle Database SQL Language Reference.
  • Haeba ho se na maqhama a kantle, o kanna oa ba le likhetho tse sa reroang le ho kopanya WHERE serapa.
  • Lipono tse kopaneng tse nang le lihokelo tsa kantle li nchafatsoa kapele ka mor'a DML e tloaelehileng le meroalo e tobileng, ha feela tafole e ka ntle e fetotsoe. Hape, litšitiso tse ikhethang li tlameha ho ba teng likholomong tse kopanyang tsa tafole ea ho kopanya kahare. Haeba ho na le mahokelo a kantle, mahokelo ohle a tlameha ho hokahana ka ANDs mme ba tlameha ho sebelisa tekano (=) mosebeletsi.
  • Bakeng sa lipono tse entsoeng ka nama CUBE, ROLLUP, lihlopha tsa lihlopha, kapa ho kopanngoa ha tsona, lithibelo tse latelang lia sebetsa:
    • The SELECT lenane le lokela ho ba le khethollo ea lihlopha e ka bang a GROUPING_ID sebetsa ho tsohle GROUP BY lipolelo kapa GROUPING e sebetsa e le 'ngoe bakeng sa e' ngoe le e 'ngoe GROUP BY poleloana. Ka mohlala, haeba e GROUP BY poleloana ea pono e entsoeng ke "GROUP BY CUBE(a, b)", ebe joale SELECT list e tlameha ho ba le "GROUPING_ID(a, b)"kapa"GROUPING(a) AND GROUPING(b)»hore pono ea nama e ka hlaphoheloa kapele.
    • GROUP BY ha ea lokela ho fella ka lihlopha tse tšoanang. Ka mohlala, "GROUP BY a, ROLLUP(a, b)" ha e khatholohe kapele hobane e fella ka lihlopha tse qotsitsoeng "(a), (a, b), AND (a)".

5.3.8.7 Lithibelo ho Nchafatsoa ka Potlako ho Maikutlo a Sebeletsang ka UNION ALL

Maikutlo a lintho tse bonahalang le UNION ALL set opareitara tshehetso ya REFRESH FAST khetho haeba maemo a latelang a khotsofetse:

  • Potso e hlalosang e tlameha ho ba le UNION ALL motho ya sebetsang maemong a hodimo.

    The UNION ALL opareitara e ke ke ea kenngoa ka har'a subquery, ntle le mokhelo o le mong: The UNION ALL e ka ba subquery ho FROM poleloana e faneng ka potso e hlalosang ke ea foromo SELECT * FROM (sheba kapa ho botsa ka UNION ALL) joalo ka mohlala o latelang:

    BAKA VIEW view_with_unionall AS (KHETHA c.rowid crid, c.cust_id, 2 umarker HO TSOA ho bareki c KAE c.cust_last_name = 'Smith' UNION TSOHLE KHETHA c.rowid crid, c.cust_id, 3 umarker HO TSOA ho bareki c KAE c.cust_last_last_ 'Jones'); ETSA PONO EA MATERIALIZED unionall_inside_view_mv REFRESH FAST ON DEMAND JOALOKAHA KHETHA * HO TSOA view_with_unionall;
    

    Hlokomela hore pono view_with_unionall e kgotsofatsa ditlhoko tsa ho hlabolla kapele.

  • Sebaka se seng le se seng sa potso ka har'a UNION ALL potso e tlameha ho khotsofatsa litlhoko tsa pono e nchafalitsoeng ka potlako ka likarolo tse kopaneng kapa pono e nchafalitsoeng e nchafalitsoeng ka maqhama.

    Li-log tsa pono tse entsoeng ka mokhoa o nepahetseng li tlameha ho theoa litafoleng joalo ka ha ho hlokahala bakeng sa mofuta o ts'oanang oa pono e nchafalitsoeng e nchafalitsoeng ka potlako.
    Hlokomela hore Oracle Database e boetse e lumella nyeoe e khethehileng ea pono e le 'ngoe ea lintho tse bonahalang tse nang le lihlopha tse fanoeng feela ROWID kholomo e kenyelelitsoe ho SELECT list le lethathamong la lintho tse bonahalang. Sena se bontšoa ke potso e hlalosang ea pono view_with_unionall.

  • The SELECT lethathamo la potso ka 'ngoe le tlameha ho kenyelletsa a UNION ALL lesupa, le UNION ALL kholomo e tlameha ho ba le palo e sa fetoheng ea linomoro kapa khoele ho e 'ngoe le e 'ngoe UNION ALL lekala. Ho feta moo, kholomo ea lesupa e tlameha ho hlaha sebakeng se tšoanang sa ordinal ho SELECT lethathamo la boloko bo bong le bo bong ba potso. Bona "UNION TSOHLE Letšoao le Potso Ngola hape»bakeng sa tlhaiso-leseling e batsi mabapi le UNION ALL litsupa.
  • Likarolo tse ling tse joalo ka likhokahano tsa kantle, lipotso tsa pono tse kopaneng feela le litafole tse hole ha li tšehetsoe bakeng sa lipono tsa nama. UNION ALL. Leha ho le joalo, hlokomela hore lipono tse fetotsoeng tse sebelisoang ho ikatisa, tse se nang mahokelo kapa likakaretso, li ka nchafatsoa kapele ha UNION ALL kapa ho sebelisoa litafole tse hole.
  • Paramethara ea ho tsamaisana e tlameha ho hlophisoa ho 9.2.0 kapa ho feta ho theha pono e nchafalitsoeng ea nama UNION ALL.

Ha ke batle ho khopisa balateli ba Oracle, empa ho ahlola ka lethathamo la lithibelo tsa bona, ho bonahala eka mochine ona o ne o ngotsoe eseng ka mokhoa o tloaelehileng, o sebelisa mofuta o itseng oa mohlala, empa ke Maindia a likete, moo bohle ba ileng ba fuoa monyetla oa ho etsa joalo. ngola lekala la bona, mme e mong le e mong wa bona a etsa seo a neng a ka se etsa. Ho sebelisa mokhoa ona bakeng sa mabaka a sebele ho tšoana le ho tsamaea sebakeng se nang le liqhomane. U ka fumana morafo ka nako leha e le efe ka ho otla e 'ngoe ea lithibelo tse sa hlakang. Hore na e sebetsa joang hape ke potso e arohaneng, empa e kaholimo ho sengoloa sena.

Seva ea Microsoft SQL

Litlhoko tse ling

Ntle le likhetho tsa SET le litlhoko tsa ts'ebetso ea deterministic, litlhoko tse latelang li tlameha ho finyelloa:

  • Mosebelisi ea sebetsang CREATE INDEX e tlameha ho ba mong'a pono.
  • Ha o theha index, the IGNORE_DUP_KEY khetho e tlameha ho hlophisoa ho OFF (setting ea kamehla).
  • Litafole li tlameha ho boleloa ka mabitso a likarolo tse peli, Schema.tablename ka tlhaloso ea pono.
  • Mesebetsi e hlalositsoeng ke mosebelisi e boletsoeng ponong e tlameha ho etsoa ka ho sebelisa WITH SCHEMABINDING kgetho.
  • Mesebetsi efe kapa efe e hlalosoang ke mosebelisi e boletsoeng ponong e tlameha ho boleloa ka mabitso a likarolo tse peli, ..
  • Thepa ea phihlello ea data ea ts'ebetso e hlalositsoeng ke mosebelisi e tlameha ho ba NO SQL, le thepa ea ho kena ka ntle e tlameha ho ba NO.
  • Mesebetsi e tloaelehileng ea nako ea ho sebetsa (CLR) e ka hlaha lethathamong le khethiloeng la pono, empa e ke ke ea e-ba karolo ea tlhaloso ea konopo ea index e kopantsoeng. Mesebetsi ea CLR e ke ke ea hlaha ho WHERE poleloana ea maikutlo kapa poleloana ea ON ea ts'ebetso ea JOIN ponong.
  • Mesebetsi ea CLR le mekhoa ea mefuta e hlalositsoeng ke basebelisi ba CLR e sebelisoang tlhalosong ea pono e tlameha ho ba le thepa e behiloeng joalokaha e bontšitsoe tafoleng e latelang.

    Property
    Hlokomela

    DETERMINISTIC = NNETE
    E tlameha ho phatlalatsoa ka ho hlaka e le tšobotsi ea mokhoa oa Microsoft .NET Framework.

    NEPILENG = NNETE
    E tlameha ho phatlalatsoa ka ho hlaka e le tšobotsi ea mokhoa oa .NET Framework.

    HO FIHLELA DATA = HA HO SQL
    E khethiloe ka ho beha tšobotsi ea DataAccess ho DataAccessKind.None le SystemDataAccess tšobotsi ho SystemDataAccessKind.None.

    HO FIHLELA KA NTLE = NO
    Thepa ena e fetoha NO bakeng sa litloaelo tsa CLR.

  • Pono e tlameha ho etsoa ka ho sebelisa WITH SCHEMABINDING kgetho.
  • Pono e tlameha ho supa feela litafole tsa motheo tse leng polokelong e tšoanang le ea chebo. Pono e ke ke ea supa maikutlo a mang.
  • Polelo ea SELECT tlhalosong ea pono ha ea tlameha ho ba le lintlha tse latelang tsa Transact-SQL:

    COUNT
    Mesebetsi ea ROWSET (OPENDATASOURCE, OPENQUERY, OPENROWSET, LE OPENXML)
    OUTER kopanya (LEFT, RIGHT, kapa FULL)

    Tafole e nkiloeng (e hlalosoang ka ho hlakisa a SELECT polelo ho FROM poleloana)
    Boiketsi ba ho ikopanya
    Ho hlalosa likholomo ka ho sebelisa SELECT * or SELECT <table_name>.*

    DISTINCT
    STDEV, STDEVP, VAR, VARP, kapa AVG
    Polelo e tloaelehileng ea tafole (CTE)

    phaphametse1, mongolo, ntext, setšoantšo, xML, kapa filestream Litšiea
    Subquery
    OVER clause, e kenyeletsang maemo kapa kakaretso ea mesebetsi ea lifensetere

    Mantsoe a ngotsoeng ka botlalo (CONTAINS, FREETEXT)
    SUM tshebetso e supang polelo e ke keng ya hlakoloa
    ORDER BY

    Mosebetsi o akaretsang o hlalosoang ke mosebelisi oa CLR
    TOP
    CUBE, ROLLUP, kapa GROUPING SETS bagwebi

    MIN, MAX
    UNION, EXCEPT, kapa INTERSECT bagwebi
    TABLESAMPLE

    Liphetoho tsa tafole
    OUTER APPLY or CROSS APPLY
    PIVOT, UNPIVOT

    Li-columns tse fokolang
    Inline (TVF) kapa mesebetsi ea boleng ba tafole ea lipolelo tse ngata (MSTVF)
    OFFSET

    CHECKSUM_AGG

    1 Pono ea indexed e ka ba le phaphametse litšiea; leha ho le joalo, litšiea tse joalo li ke ke tsa kenyelletsoa ka har'a konopo ea index e kopantsoeng.

  • If GROUP BY e teng, tlhaloso ea VIEW e tlameha ho ba le COUNT_BIG(*) 'me ha ea lokela ho ba le HAVING. Tsena GROUP BY lithibelo li sebetsa feela ho tlhaloso ea maikutlo a indexed. Potso e ka sebelisa chebo ea indexed moralong oa eona oa ts'ebetso le haeba e sa khotsofatse tsena GROUP BY lithibelo.
  • Haeba pono tlhaloso e na le a GROUP BY poleloana, senotlolo sa index e ikhethang ea clustered e ka supa feela litšiea tse boletsoeng ho GROUP BY serapa.

Ho hlakile mona hore Maindia a ne a sa kenelle, kaha a ile a etsa qeto ea ho e etsa ho latela morero “re tla etsa ho fokolang, empa hantle.” Ke hore, ba na le merafo e mengata tšimong, empa sebaka sa bona se hlakile haholoanyane. Ntho e nyahamisang ka ho fetisisa ke moeli ona:

Pono e tlameha ho supa feela litafole tsa motheo tse leng polokelong e tšoanang le ea chebo. Pono e ke ke ea supa maikutlo a mang.

Ho mantsoe a rona, sena se bolela hore ts'ebetso e ke ke ea fihlella tšebetso e 'ngoe e entsoeng. Sena se theola maikutlo ohle a bud.
Hape, moeli ona (le ho feta mongolong) o fokotsa haholo maemo a ts'ebeliso:

Polelo ea SELECT tlhalosong ea pono ha ea tlameha ho ba le lintlha tse latelang tsa Transact-SQL:

COUNT
Mesebetsi ea ROWSET (OPENDATASOURCE, OPENQUERY, OPENROWSET, LE OPENXML)
OUTER kopanya (LEFT, RIGHT, kapa FULL)

Tafole e nkiloeng (e hlalosoang ka ho hlakisa a SELECT polelo ho FROM poleloana)
Boiketsi ba ho ikopanya
Ho hlalosa likholomo ka ho sebelisa SELECT * or SELECT <table_name>.*

DISTINCT
STDEV, STDEVP, VAR, VARP, kapa AVG
Polelo e tloaelehileng ea tafole (CTE)

phaphametse1, mongolo, ntext, setšoantšo, xML, kapa filestream Litšiea
Subquery
OVER clause, e kenyeletsang maemo kapa kakaretso ea mesebetsi ea lifensetere

Mantsoe a ngotsoeng ka botlalo (CONTAINS, FREETEXT)
SUM tshebetso e supang polelo e ke keng ya hlakoloa
ORDER BY

Mosebetsi o akaretsang o hlalosoang ke mosebelisi oa CLR
TOP
CUBE, ROLLUP, kapa GROUPING SETS bagwebi

MIN, MAX
UNION, EXCEPT, kapa INTERSECT bagwebi
TABLESAMPLE

Liphetoho tsa tafole
OUTER APPLY or CROSS APPLY
PIVOT, UNPIVOT

Li-columns tse fokolang
Inline (TVF) kapa mesebetsi ea boleng ba tafole ea lipolelo tse ngata (MSTVF)
OFFSET

CHECKSUM_AGG

OUTER JOINS, UNION, ORDER BY le tse ling ha lia lumelloa. Ho ka 'na ha e-ba bonolo ho hlalosa se neng se ka sebelisoa ho e-na le se neng se ke ke sa sebelisoa. Lenane le ka 'na la e-ba le khuts'oane haholo.

Ho akaretsa: lethathamo le leholo la lithibelo ho e 'ngoe le e' ngoe (ha re elelloe khoebo) DBMS vs ha ho letho (ntle le e le 'ngoe e utloahalang, eseng ea theknoloji) ho theknoloji ea LGPL. Leha ho le joalo, hoa lokela ho hlokomeloa hore ho kenya ts'ebetsong mokhoa ona ho logic ea likamano ho batla ho le thata ho feta ka mokhoa o hlalositsoeng o sebetsang.

Ts'ebetsong

E sebetsa joang? PostgreSQL e sebelisoa e le "mochine o sebetsang". Ho na le algorithm e rarahaneng ka hare e hahang lipotso. Mona mohloli. Hape ha ho na sehlopha se seholo sa li-heuristics tse nang le sehlopha sa ifs. Kahoo, haeba u na le likhoeli tse 'maloa ho ithuta, u ka leka ho utloisisa meaho.

Na e sebetsa ka katleho? E sebetsa hantle. Ka bomalimabe, sena se thata ho paka. Nka bolela feela hore haeba u nahana ka lipotso tse likete tse teng lits'ebetsong tse kholo, joale ka karolelano li sebetsa hantle ho feta tsa moqapi ea molemo. Setsebi se hloahloa sa SQL se ka ngola potso efe kapa efe ka mokhoa o atlehileng, empa ka lipotso tse sekete a ke ke a ba le tšusumetso kapa nako ea ho e etsa. Ntho feela eo joale nka e bolelang e le bopaki ba katleho ke hore merero e mengata e sebetsa sethaleng se hahiloeng holim'a DBMS ena. Sistimi ea ERP, e nang le likete tsa mesebetsi e fapaneng ea MATERIALIZED, e nang le basebelisi ba likete le li-database tsa terabyte tse nang le lirekoto tse limilione tse makholo tse sebetsang ho seva se tloaelehileng sa li-processor tse peli. Leha ho le joalo, mang kapa mang a ka hlahloba / hana katleho ka ho jarolla sethala le PostgreSQL, ho bulela ho rema lipotso tsa SQL le ho leka ho fetola logic le data moo.

Lihloohong tse latelang, ke tla boela ke bue ka hore na u ka beha lithibelo joang mesebetsing, ho sebetsa ka linako tsa phetoho, le tse ling tse ngata.

Source: www.habr.com

Eketsa ka tlhaloso