Ny fifandanjana dia manoratra sy mamaky ao anaty tahiry

Ny fifandanjana dia manoratra sy mamaky ao anaty tahiry
Tamin'ny teo aloha lahatsoratra Nofaritako ny foto-kevitra sy ny fampiharana ny angon-drakitra miorina amin'ny fototry ny asa, fa tsy ny latabatra sy ny saha toy ny amin'ny angon-drakitra mifandraika. Izy io dia nanome ohatra maro mampiseho ny tombony amin'ity fomba fiasa ity raha oharina amin'ny fomba mahazatra. Maro no nahita fa tsy maharesy lahatra azy ireo.

Amin'ity lahatsoratra ity, hasehoko ny fomba ahafahan'ity hevitra ity ahafahanao mandanjalanja haingana sy mora amin'ny fanoratana sy famakiana amin'ny angon-drakitra tsy misy fiovana amin'ny lojika miasa. Ny fiasa mitovy amin'izany dia noezahina hampiharina amin'ny DBMS ara-barotra maoderina (indrindra, Oracle sy Microsoft SQL Server). Any amin'ny faran'ny lahatsoratra dia hasehoko fa ny zavatra nataon'izy ireo, raha lazaina amin'ny fomba malefaka, dia tsy nandaitra tsara.

famaritana

Tahaka ny teo aloha, ho an'ny fahatakarana tsara kokoa dia hanomboka ny famaritana miaraka amin'ny ohatra aho. Aoka hatao hoe mila mampihatra ny lojika izay hamerina ny lisitry ny departemanta misy ny isan'ny mpiasa ao aminy sy ny karamany manontolo.

Ao amin'ny angon-drakitra functional dia ho toy izao:

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

Ny fahasarotana amin'ny fanatanterahana ity fanontaniana ity amin'ny DBMS rehetra dia hitovy amin'ny O (isan'ny mpiasa)satria io kajikajy io dia mitaky fitarafana ny latabatry ny mpiasa iray manontolo ary avy eo manakambana azy ireo araka ny sampana. Hisy ihany koa ny fanampim-panampiana kely (mino izahay fa betsaka kokoa ny mpiasa noho ny sampan-draharaha) arakaraka ny drafitra nofidina O (ny isan'ny mpiasa) na O (isan'ny departemanta) ho an'ny vondrona sy ny sisa.

Mazava fa mety tsy mitovy amin'ny DBMS isan-karazany ny overhead famonoana, saingy tsy hiova amin'ny fomba rehetra ny fahasarotana.

Amin'ny fampiharana tolo-kevitra, ny DBMS miasa dia hamorona subquery iray izay hanao kajy ny soatoavina ilaina ho an'ny departemanta, ary avy eo dia manao JOIN miaraka amin'ny latabatra departemanta hahazoana ny anarana. Na izany aza, ho an'ny asa tsirairay, rehefa manambara dia azo atao ny mametraka marika MATERIALIZED manokana. Ny rafitra dia hamorona sehatra mifanaraka amin'izany ho azy ho an'ny asa tsirairay. Rehefa manova ny sandan'ny asa iray dia hiova ihany koa ny sandan'ny saha amin'ny fifanakalozana mitovy. Rehefa miditra amin'ity asa ity dia ho azo ny saha efa nokajiana mialoha.

Indrindra indrindra, raha mametraka MATERIALIZED ho an'ny fiasa ianao countEmployees ΠΈ salarySum, avy eo dia ampiana saha roa eo amin'ny latabatra misy ny lisitry ny departemanta, izay hitahiry ny isan'ny mpiasa sy ny karamany manontolo. Isaky ny misy fiovana eo amin'ny mpiasa, ny karamany na ny sampana misy azy, dia hanova ho azy ny sandan'ireo sehatra ireo ny rafitra. Ny fangatahana etsy ambony dia hiditra mivantana amin'ireo saha ireo ary hotanterahina ao O (isan'ny departemanta).

Inona avy ireo fameperana? Zavatra iray ihany: ny fiasa toy izany dia tsy maintsy manana isa voafetra amin'ny soatoavina fampidirana izay mamaritra ny sandany. Raha tsy izany dia tsy ho azo atao ny manamboatra latabatra mitahiry ny sandany rehetra, satria tsy misy latabatra misy andalana tsy manam-petra.

ohatra:

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

Ity fiasa ity dia voafaritra ho an'ny sanda tsy misy fetran'ny N (ohatra, ny sanda ratsy rehetra dia mety). Noho izany, tsy afaka mametraka MATERIALIZED ianao. Noho izany dia fetra lojika izany fa tsy ara-teknika (izany hoe tsy hoe tsy afaka nampihatra izany). Raha tsy izany dia tsy misy famerana. Azonao atao ny mampiasa grouping, sorting, AND and OR, PARTITION, recursion, sns.

Ohatra, ao amin'ny olana 2.2 amin'ny lahatsoratra teo aloha, azonao atao ny mametraka MATERIALIZED amin'ny fiasa roa:

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;

Ny rafitra mihitsy no hamorona latabatra iray misy fanalahidy karazana Customer, Product ΠΈ INTEGER, dia hanampy saha roa amin'izany ary hanavao ny soatoavin'ny saha ao aminy miaraka amin'ny fiovana rehetra. Rehefa misy fiantsoana bebe kokoa amin'ireo fiasa ireo dia tsy hokajiana izy ireo, fa ny sandany kosa dia hovakiana avy amin'ny saha mifanaraka amin'izany.

Amin'ny fampiasana an'io mekanika io, azonao atao, ohatra, ny manala ny recursions (CTE) amin'ny fanontaniana. Indrindra indrindra, diniho ireo vondrona mamorona hazo mampiasa ny fifandraisan'ny zanaka/ray aman-dreny (ny vondrona tsirairay dia manana rohy mankany amin'ny ray aman-dreniny):

parent = DATA Group (Group);

Ao amin'ny angon-drakitra miasa, ny lojika recursion dia azo faritana toy izao manaraka izao:

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;

Satria ho an'ny asa isParent dia voamarika hoe MATERIALIZED, avy eo dia hisy latabatra misy fanalahidy roa (vondrona) hatsangana ho azy, izay ahitana ny saha. isParent ho marina raha tsy zanaky ny faharoa ny lakile voalohany. Ny isan'ny fidirana amin'ity tabilao ity dia hitovy amin'ny isan'ny vondrona ampitomboina amin'ny salan'ny halalin'ny hazo. Raha mila, ohatra, ny manisa ny isan'ny taranaky ny vondrona iray ianao, dia azonao ampiasaina ity fiasa ity:

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

Tsy hisy CTE amin'ny fangatahana SQL. Ho solon'izay dia hisy GROUP BY tsotra.

Amin'ny fampiasana an'io mekanika io, azonao atao ny manafoana ny angon-drakitra raha ilaina:

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

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

Rehefa miantso asa daty ho an'ny andalana baiko, ny saha misy fanondroana dia hovakiana avy amin'ny latabatra misy andalana. Rehefa miova ny datin'ny baiko dia ny rafitra mihitsy no hanao kajy ho azy ny daty tsy ara-dalΓ na ao amin'ny tsipika.

tombony

Inona no anton'izany mekanika rehetra izany? Ao amin'ny DBMS mahazatra, raha tsy manoratra fanontaniana indray, ny developer na DBA dia tsy afaka manova indeksa fotsiny, mamaritra ny antontan'isa ary milaza amin'ny mpandrindra fangatahana ny fomba hanatanterahana azy ireo (ary ny HINTs dia tsy misy afa-tsy amin'ny DBMS ara-barotra). Na manao ahoana na manao ahoana ny ezaka ataon'izy ireo dia tsy ho vitany ny hamita ny fanontaniana voalohany ao amin'ny lahatsoratra ao O (isan'ny departemanta) tsy manova fanontaniana na manampy trigger. Ao amin'ny drafitra natolotra, amin'ny dingana fampandrosoana dia tsy mila mieritreritra momba ny firafitry ny fitahirizana angon-drakitra sy ny fitambarana ampiasaina ianao. Izany rehetra izany dia azo ovaina mora foana amin'ny lalitra, mivantana amin'ny asa.

Amin'ny fampiharana dia toa izao. Ny olona sasany dia mamorona lojika mivantana mifototra amin'ny asa atao. Tsy azon'izy ireo ny algorithm sy ny fahasarotany, na ny drafitra famonoana, na ny karazana fiaraha-miasa, na ny singa ara-teknika hafa. Ireo olona ireo dia mpandinika raharaham-barotra kokoa noho ny mpamorona. Avy eo, izany rehetra izany dia mandeha amin'ny fitsapana na fandidiana. Mamela ny firaketana an-tsoratra fanontaniana efa ela. Rehefa hita ny fanontaniana lava dia misy olona hafa (ara-teknika kokoa - indrindra DBA) manapa-kevitra ny hamela ny MATERIALIZED amin'ny asa mpanelanelana sasany. Mampihena kely ny firaketana izany (satria mitaky fanavaozana sehatra fanampiny amin'ny fifampiraharahana). Na izany aza, tsy io fanontaniana io ihany no manafaingana be, fa koa ny hafa rehetra mampiasa an'io fiasa io. Amin'izay fotoana izay ihany koa dia mora ny manapa-kevitra hoe iza amin'ireo asa hotanterahina. Paramètre roa lehibe: ny isan'ny soatoavina azo atao (izany no isan'ny rakitra ao amin'ny latabatra mifanandrify), ary impiry izy io no ampiasaina amin'ny asa hafa.

analogs

Ny DBMS ara-barotra maoderina dia manana fomba fiasa mitovy: MATERIALIZED VIEW miaraka amin'ny FAST REFRESH (Oracle) sy INDEXED VIEW (Microsoft SQL Server). Ao amin'ny PostgreSQL, ny MATERIALIZED VIEW dia tsy azo havaozina amin'ny fifampiraharahana, fa amin'ny fangatahana ihany (ary na dia misy fameperana henjana aza), noho izany dia tsy dinihinay izany. Saingy manana olana maro izy ireo izay mametra ny fampiasana azy.

Voalohany, azonao atao ny mametraka materialization raha efa namorona VIEW mahazatra ianao. Raha tsy izany, dia tsy maintsy manoratra ny fangatahana sisa ianao mba hidirana amin'ny fijery vao noforonina mba hampiasana an'io fametahana io. Na avelao ny zava-drehetra, fa farafaharatsiny dia tsy mahomby raha toa ka misy angon-drakitra efa voalamina mialoha, saingy maro ny fanontaniana tsy mampiasa azy io, fa mamerina izany.

Faharoa, manana fameperana marobe izy ireo:

Oracle

5.3.8.4 Fameperana ankapobeny momba ny fanavaozana haingana

Ny fanontaniana mamaritra ny fomba fijery mivaingana dia voafetra toy izao manaraka izao:

  • Ny fomba fijery mivaingana dia tsy tokony ahitana references amin'ny fomba fiteny tsy miverimberina toy ny SYSDATE ary ROWNUM.
  • Ny fomba fijery mivaingana dia tsy tokony ahitana references RAW or LONG RAW karazana data.
  • Tsy mety ahitana a SELECT lisitra subquery.
  • Tsy afaka ahitana asa famakafakana (ohatra, RANK) ao amin'ny SELECT fepetra.
  • Tsy afaka manondro tabilao misy an XMLIndex index dia voafaritra.
  • Tsy mety ahitana a MODEL fepetra.
  • Tsy mety ahitana a HAVING clause misy subquery.
  • Tsy afaka mirakitra fanontaniana mianadahy manana izany ANY, ALL, na NOT EXISTS.
  • Tsy mety ahitana a [START WITH …] CONNECT BY fepetra.
  • Tsy afaka ahitana tabilao antsipirihan'ny maro amin'ny tranokala samihafa.
  • ON COMMIT Ny fijery mivaingana dia tsy afaka manana tabilao antsipiriany lavitra.
  • Ny fomba fijery mivaingana dia tsy maintsy misy mitambatra na mitambatra.
  • Fijery mitambatra mivaona ary fomba fijery mitambatra miaraka amin'ny a GROUP BY tsy afaka misafidy avy amin'ny tabilao voarindra index.

5.3.8.5 Fameperana amin'ny fanavaozana haingana amin'ny fomba fijery mivaingana miaraka amin'ny fiarahana ihany

Ny famaritana fanontaniana momba ny fomba fijery mivaingana miaraka amin'ny fiarahana ihany ary tsy misy fitambarana dia misy famerana manaraka ireto amin'ny fanavaozana haingana:

  • Fameperana rehetra avy amin'ny Β«Fameperana ankapobeny amin'ny Famerenana haingana".
  • Tsy afaka manana izy ireo GROUP BY fehezanteny na fitambarana.
  • Rowids ny latabatra rehetra ao amin'ny FROM ny lisitra dia tsy maintsy miseho ao amin'ny SELECT lisitry ny fanontaniana.
  • Ny diarin'ny fijery mivaingana dia tsy maintsy misy miaraka amin'ny rowids ho an'ny latabatra fototra rehetra ao amin'ny FROM lisitry ny fanontaniana.
  • Tsy afaka mamorona fomba fijery mivaingana azo havaozina haingana avy amin'ny latabatra maromaro miaraka amin'ny fampifandraisana tsotra izay misy tsanganana karazana zavatra ao amin'ny SELECT fanambarana.

Ary koa, ny fomba famelombelomana nofidinao dia tsy hahomby tsara raha:

  • Ny fangatahana famaritana dia mampiasa rindran-damba ivelany izay mitovitovy amin'ny fidirana anatiny. Raha toa ka misy fanakambanana toy izany ny fangatahana famaritana, dia diniho ny hanoratra indray ny fangatahana famaritana mba hahitana ny fidirana anatiny.
  • The SELECT Ny lisitry ny fijery mivaingana dia misy fanehoan-kevitra amin'ny tsanganana avy amin'ny latabatra maromaro.

5.3.8.6 Fameperana momba ny fanavaozana haingana amin'ny fomba fijery mivaingana miaraka amin'ny fitambarana

Ny famaritana ny fanontaniana momba ny fomba fijery mivaingana miaraka amin'ny fitambarana na ny fiarahana dia misy fameperana manaraka ny fanavaozana haingana:

Famerenana haingana dia tohana ho an'ny roa ON COMMIT ary ON DEMAND fomba fijery mivaingana, kanefa mihatra ireto fameperana manaraka ireto:

  • Ny tabilao rehetra amin'ny fijery mivaingana dia tsy maintsy manana diarin'ny fijerena mivaingana, ary ny diarin'ny fijerena mivaingana dia tsy maintsy:
    • Fenoy ny tsanganana rehetra avy amin'ny tabilao voalaza ao amin'ny fijery mivaingana.
    • Lazao amin'ny ROWID ary INCLUDING NEW VALUES.
    • Apetaho ny SEQUENCE clause raha toa ka andrasana hisy fifangaroan'ny insert/direct-loads, ny famafana ary ny fanavaozana ny latabatra.

  • ihany SUM, COUNT, AVG, STDDEV, VARIANCE, MIN ary MAX dia tohana ho famelombelomana haingana.
  • COUNT(*) tsy maintsy voafaritra.
  • Ny fiasa mitambatra dia tsy maintsy miseho amin'ny ampahany ivelany indrindra amin'ny fitenenana. Izany hoe, aggregates toy ny AVG(AVG(x)) or AVG(x)+ AVG(x) tsy mahazo.
  • Ho an'ny fitambarana tsirairay toy ny AVG(expr), ny mifanitsy COUNT(expr) tsy maintsy manatrika. Oracle dia manoro izany SUM(expr) ho voafaritra.
  • If VARIANCE(expr) or STDDEV(expr) dia voafaritra, COUNT(expr) ary SUM(expr) tsy maintsy voafaritra. Oracle dia manoro izany SUM(expr *expr) ho voafaritra.
  • The SELECT Ny tsanganana ao amin'ny fangatahana famaritana dia tsy mety ho fomba fiteny sarotra misy tsanganana avy amin'ny tabilao fototra maro. Ny vahaolana azo atao amin'izany dia ny fampiasana fomba fijery mivaingana.
  • The SELECT tsy maintsy ahitana ny lisitra rehetra GROUP BY andry.
  • Ny fijery mivaingana dia tsy mifototra amin'ny latabatra lavitra iray na maromaro.
  • Raha mampiasa a CHAR karazana angon-drakitra ao amin'ny tsanganana sivana amin'ny diarin'ny fijery mivaingana, tsy maintsy mitovy ny fitambaran'ny toetran'ny tranokala master sy ny fijery mivaingana.
  • Raha manana ny iray amin'ireto manaraka ireto ny fomba fijery mivaingana, dia tsy tohana afa-tsy amin'ny fampidirana DML mahazatra sy entana mivantana ny famelombelomana haingana.
    • Fomba fijery mivaingana miaraka amin'ny MIN or MAX mitambatra
    • Fomba fijery mivaingana izay manana SUM(expr) fa tsia COUNT(expr)
    • Fijery mivaingana tsy misy COUNT(*)

    Ny fomba fijery mivaingana toy izany dia antsoina hoe fomba fijery ara-nofo fotsiny.

  • Fomba fijery mivaingana miaraka amin'ny MAX or MIN dia azo havaozina haingana aorian'ny famafana na mifangaro DML fanambarana raha tsy misy a WHERE fepetra.
    Ny famelombelomana haingana max/min aorian'ny famafana na DML mifangaro dia tsy mitovy fitondran-tena amin'ny tranga ampidirina ihany. Izy io dia mamafa sy mamerina ny sanda max/min ho an'ireo vondrona voakasik'izany. Mila mahafantatra ny fiantraikan'ny zava-bitany ianao.
  • Fijery mivaingana miaraka amin'ny fomba fijery voatonona na subqueries ao amin'ny FROM azo havaozina haingana ny fehezanteny raha azo atambatra tanteraka ny hevitra. Raha mila fanazavana momba izay fomba fijery hitambatra dia jereo Oracle Database SQL Language Reference.
  • Raha tsy misy fifandraisana ivelany dia mety manana safidy tsy misy dikany ianao ary miditra ao amin'ny WHERE fepetra.
  • Ny fomba fijery mitambatra mivaingana miaraka amin'ny atambatra ivelany dia azo havaozina haingana aorian'ny DML mahazatra sy ny entana mivantana, raha toa ka ny latabatra ivelany ihany no novaina. Ary koa, tsy maintsy misy teritery tsy manam-paharoa eo amin'ny tsanganana mitambatra amin'ny latabatra fidirana anatiny. Raha misy fifandraisana ivelany, ny fifandraisana rehetra dia tsy maintsy mifandray amin'ny ANDary tsy maintsy mampiasa ny fitoviana (=) mpandraharaha.
  • Ho an'ny fijery mivaingana miaraka amin'ny CUBE, ROLLUP, andiana fanakambanana, na fampifandraisana azy ireo, dia mihatra ireto fameperana manaraka ireto:
    • The SELECT Ny lisitra dia tokony ahitana fanavahana vondrona izay mety ho a GROUPING_ID miasa amin'ny rehetra GROUP BY fitenenana na GROUPING miasa iray ho an'ny tsirairay GROUP BY fitenenana. Ohatra, raha ny GROUP BY Ny fehezan-teny amin'ny fomba fijery mivaingana dia "GROUP BY CUBE(a, b)", avy eo ny SELECT ny lisitra dia tokony ahitana na "GROUPING_ID(a, b)Β»na Β«GROUPING(a) AND GROUPING(b)Β» mba hamerenana haingana ny fomba fijery mivaingana.
    • GROUP BY tsy tokony hiteraka vondrona dika mitovy. Ohatra, "GROUP BY a, ROLLUP(a, b)"Tsy azo havaozina haingana satria miteraka vondrona duplicate"(a), (a, b), AND (a)".

5.3.8.7 Fameperana momba ny fanavaozana haingana amin'ny fomba fijery mivaingana miaraka amin'ny UNION ALL

Fomba fijery mivaingana miaraka amin'ny UNION ALL set operator manohana ny REFRESH FAST safidy raha mahafeno ireto fepetra manaraka ireto:

  • Ny fanontaniana mamaritra dia tsy maintsy manana ny UNION ALL mpandraharaha amin'ny ambaratonga ambony.

    The UNION ALL Tsy azo ampidirina ao anatin'ny subquery ny operator, afa-tsy ny iray: Ny UNION ALL dia mety ho ao amin'ny subquery ao amin'ny FROM fehezanteny raha toa ka misy endrika ny fangatahana famaritana SELECT * FROM (jereo na subquery miaraka amin'ny UNION ALL) toy ny amin'ity ohatra manaraka ity:

    CREATE VIEW view_with_unionall AS (SELECT c.rowid crid, c.cust_id, 2 umarker avy amin'ny mpanjifa c WHERE c.cust_last_name = 'Smith' UNION REHETRA SELECT c.rowid crid, c.cust_id, 3 umarker FROM mpanjifa c WHERE c.cust_last_name 'Jones'); MAMORONA VIEW MATERIALIZED unionall_inside_view_mv REFRESH FAST ON DEMAND AS SELECT * DE View_with_unionall;
    

    Mariho fa ny fijery view_with_unionall mahafeno ny fepetra takiana amin'ny fanavaozana haingana.

  • Ny sakana fanontaniana tsirairay ao amin'ny UNION ALL Ny fangatahana dia tsy maintsy mahafeno ny fepetra takian'ny fomba fijery mivaingana azo havaozina haingana miaraka amin'ny fitambarana na fomba fijery mivaingana azo havaozina haingana miaraka amin'ny fitambarana.

    Ny diarin'ny fijery mivaingana mifanaraka amin'izany dia tsy maintsy amboarina eo amin'ny latabatra araka izay takiana amin'ny karazana fijery mivaingana azo havaozina haingana.
    Mariho fa ny Oracle Database dia mamela ny tranga manokana amin'ny fijerena latabatra tokana miaraka amin'ny fidirana raha tsy omena ny ROWID tsanganana dia tafiditra ao amin'ny SELECT lisitra ary ao amin'ny log de view materialized. Izany dia aseho amin'ny fanontaniana mamaritra ny fijery view_with_unionall.

  • The SELECT Ny lisitry ny fanontaniana tsirairay dia tsy maintsy misy a UNION ALL marker, ary ny UNION ALL Ny tsanganana dia tsy maintsy manana sanda isa na tady tsy miovaova miavaka amin'ny tsirairay UNION ALL sampana. Ankoatra izany, ny tsanganana marika dia tsy maintsy miseho amin'ny toerana ordinal mitovy amin'ny SELECT lisitry ny sakana fanontaniana tsirairay. Jereo"UNION ALL Marker sy Query RewriteΒ» Raha mila fanazavana fanampiny momba ny UNION ALL marika.
  • Ny endri-javatra sasany toy ny fikambanan'ny ivelany, ny fanontaniam-pijery mivaingana mitambatra fotsiny ary ny latabatra lavitra dia tsy tohanana ho an'ny fijery mivaingana amin'ny UNION ALL. Mariho anefa fa ny fomba fijery mivaingana ampiasaina amin'ny kopia, izay tsy ahitana fitambarana na fitambarana, dia azo havaozina haingana rehefa UNION ALL na latabatra lavitra no ampiasaina.
  • Tsy maintsy apetraka amin'ny 9.2.0 na ambony kokoa ny mari-pamantarana fanombohana mifanentana mba hamoronana fomba fijery mivaingana azo havaozina haingana miaraka amin'ny UNION ALL.

Tsy te hanafintohina ny mpankafy Oracle aho, fa raha jerena amin'ny lisitry ny fameperana azy ireo, dia toa tsy tamin'ny tranga ankapobeny no nanoratana ity mekanika ity, tamin'ny fampiasana karazana modely, fa tamin'ny Indiana an'arivony, izay nahazoan'ny rehetra fahafahana manoratra ny sampany avy, ary samy nanao izay azony natao izy. Ny fampiasana an'io mekanika io ho an'ny lojika tena izy dia toy ny mandeha amin'ny toeram-pitrandrahana. Afaka mahazo toeram-pitrandrahana ianao amin'ny fotoana rehetra amin'ny alΓ lan'ny fikapohana ny iray amin'ireo fameperana tsy mazava. Fanontaniana misaraka ihany koa ny fomba fiasan'izy io, saingy mihoatra ny sahan'ity lahatsoratra ity.

Microsoft SQLServer

Additional Requirements

Ho fanampin'ny safidy SET sy ny fepetra takian'ny asa voafaritra dia tsy maintsy fenoina ireto fepetra manaraka ireto:

  • Ny mpampiasa izay manatanteraka CREATE INDEX tsy maintsy ho tompon'ny fijery.
  • Rehefa mamorona ny index ianao, ny IGNORE_DUP_KEY ny safidy dia tsy maintsy apetraka amin'ny OFF (ny default).
  • Ny tabilao dia tsy maintsy ilazana anarana misy ampahany roa, tetika.tablename amin'ny famaritana ny fijery.
  • Ny fiasa voafaritry ny mpampiasa voalaza ao amin'ny fijery dia tsy maintsy noforonina amin'ny fampiasana ny WITH SCHEMABINDING safidy.
  • Izay asa voafaritry ny mpampiasa voalaza ao amin'ny fijery dia tsy maintsy asian-teny amin'ny anarana mizara roa, ..
  • Ny fananana fidirana angon-drakitra amin'ny fiasa voafaritry ny mpampiasa dia tsy maintsy NO SQL, ary ny fananana fidirana ivelany dia tsy maintsy NO.
  • Ny fiasan'ny fiteny mahazatra (CLR) dia mety hiseho amin'ny lisitry ny fijery voafantina, saingy tsy mety ho anisan'ny famaritana ny fanalahidin'ny fanondroana mivondrona. Ny fiasan'ny CLR dia tsy afaka miseho ao amin'ny clause WHERE amin'ny fijery na ny fehezan-dalΓ na ON amin'ny asa JOIN amin'ny fijery.
  • Ny fiasa sy ny fomba fiasa CLR amin'ny karazana voafaritry ny mpampiasa CLR ampiasaina amin'ny famaritana fijery dia tsy maintsy manana ny fananana napetraka araka ny asehon'ity tabilao manaraka ity.

    Property
    Fanamarihana

    DETERMINISTIC = MARINA
    Tsy maintsy ambara mazava ho toetran'ny fomba fiasa Microsoft .NET Framework.

    MARINA = MARINA
    Tsy maintsy ambara mazava ho toetran'ny fomba .NET Framework.

    DATA ACCESS = TSY SQL
    Tapa-kevitra amin'ny fametrahana ny toetra DataAccess amin'ny DataAccessKind.None sy ny toetra SystemDataAccess amin'ny SystemDataAccessKind.None.

    FIdirana ivelany = TSIA
    Ity fananana ity dia TSIA ho an'ny mahazatra CLR.

  • Ny fomba fijery dia tsy maintsy noforonina amin'ny fampiasana ny WITH SCHEMABINDING safidy.
  • Ny fijerena dia tsy maintsy manondro tabilao fototra izay ao amin'ny angon-drakitra mitovy amin'ny fijery. Ny fijery dia tsy afaka manondro hevitra hafa.
  • Ny fanambarana SELECT ao amin'ny famaritana fijery dia tsy tokony ahitana ireto singa Transact-SQL manaraka ireto:

    COUNT
    fiasa ROWSET (OPENDATASOURCE, OPENQUERY, OPENROWSET, ARY OPENXML)
    OUTER mitambatra (LEFT, RIGHT, na FULL)

    Table derived (famaritana amin'ny famaritana a SELECT fanambarana ao amin'ny FROM clause)
    Self-joins
    Famaritana tsanganana amin'ny fampiasana SELECT * or SELECT <table_name>.*

    DISTINCT
    STDEV, STDEVP, VAR, VARP, na AVG
    Fiteny latabatra iombonana (CTE)

    float1, lahatsoratra, ntext, sary, XML, na filestream andry
    Subquery
    OVER clause, izay ahitana ny filaharana na fitambaran'ny fikandrana

    Lahatsoratra feno (CONTAINS, FREETEXT)
    SUM asa izay manondro fitenenana nullable
    ORDER BY

    CLR fiasan'ny aggregate voafaritry ny mpampiasa
    TOP
    CUBE, ROLLUP, na GROUPING SETS mpandraharaha

    MIN, MAX
    UNION, EXCEPT, na INTERSECT mpandraharaha
    TABLESAMPLE

    Variable tabilao
    OUTER APPLY or CROSS APPLY
    PIVOT, UNPIVOT

    Sehatra tsanganana kely
    Inline (TVF) na asa tombantombana amin'ny latabatra maromaro (MSTVF)
    OFFSET

    CHECKSUM_AGG

    1 Ny fijery voarakitra dia mety ahitana float tsanganana; na izany aza, ny tsanganana toy izany dia tsy azo ampidirina amin'ny fanalahidin'ny fanondroana mivondrona.

  • If GROUP BY misy, tsy maintsy misy ny famaritana VIEW COUNT_BIG(*) ary tsy tokony ahitana HAVING. Ireo GROUP BY ny fameperana dia tsy mihatra afa-tsy amin'ny famaritana fijery voarakitra. Ny fanontaniana iray dia afaka mampiasa fomba fijery indexed amin'ny drafitra fanatanterahana azy na dia tsy mahafeno ireo fepetra ireo aza GROUP BY fameperana.
  • Raha misy famaritana ny fijery misy a GROUP BY clause, ny fanalahidin'ny fanondroana mivondrona tokana dia tsy afaka manondro afa-tsy ireo tsanganana voatondro ao amin'ny GROUP BY fepetra.

Miharihary eto fa tsy tafiditra ao anatin’izany ny Karana, satria nanapa-kevitra ny hanao izany araka ny teti-dratsiny izy ireo hoe β€œhanao kely izahay, fa tsara”. Izany hoe, betsaka kokoa ny vanja eny an-kianja, fa mangarahara kokoa ny toerana misy azy. Ny tena mahasosotra dia ity fetra ity:

Ny fijerena dia tsy maintsy manondro tabilao fototra izay ao amin'ny angon-drakitra mitovy amin'ny fijery. Ny fijery dia tsy afaka manondro hevitra hafa.

Amin'ny voambolanay dia midika izany fa tsy afaka miditra amin'ny asa mivaingana hafa ny asa iray. Izany dia manapaka ny ideolojia rehetra amin'ny tsimokaretina.
Ary koa, ity famerana ity (ary bebe kokoa amin'ny lahatsoratra) dia mampihena be ny tranga fampiasana:

Ny fanambarana SELECT ao amin'ny famaritana fijery dia tsy tokony ahitana ireto singa Transact-SQL manaraka ireto:

COUNT
fiasa ROWSET (OPENDATASOURCE, OPENQUERY, OPENROWSET, ARY OPENXML)
OUTER mitambatra (LEFT, RIGHT, na FULL)

Table derived (famaritana amin'ny famaritana a SELECT fanambarana ao amin'ny FROM clause)
Self-joins
Famaritana tsanganana amin'ny fampiasana SELECT * or SELECT <table_name>.*

DISTINCT
STDEV, STDEVP, VAR, VARP, na AVG
Fiteny latabatra iombonana (CTE)

float1, lahatsoratra, ntext, sary, XML, na filestream andry
Subquery
OVER clause, izay ahitana ny filaharana na fitambaran'ny fikandrana

Lahatsoratra feno (CONTAINS, FREETEXT)
SUM asa izay manondro fitenenana nullable
ORDER BY

CLR fiasan'ny aggregate voafaritry ny mpampiasa
TOP
CUBE, ROLLUP, na GROUPING SETS mpandraharaha

MIN, MAX
UNION, EXCEPT, na INTERSECT mpandraharaha
TABLESAMPLE

Variable tabilao
OUTER APPLY or CROSS APPLY
PIVOT, UNPIVOT

Sehatra tsanganana kely
Inline (TVF) na asa tombantombana amin'ny latabatra maromaro (MSTVF)
OFFSET

CHECKSUM_AGG

Voarara ny fidirana ivelany, UNION, ORDER BY sy ny hafa. Mety ho mora kokoa ny mamaritra izay azo ampiasaina fa tsy izay tsy azo ampiasaina. Mety ho fohy kokoa ny lisitra.

Raha fintinina: fameperana goavana amin'ny tsirairay (aoka ho marihina ara-barotra) DBMS vs tsy misy (ankoatra ny lojika iray, tsy ara-teknika) amin'ny teknolojia LGPL. Na izany aza, tokony ho marihina fa ny fampiharana io mekanika io amin'ny lojika mifandray dia somary sarotra kokoa noho ny amin'ny lojika fiasa voalaza.

fanatanterahana

Ahoana ny fandehany? PostgreSQL dia ampiasaina ho "milina virtoaly". Misy algorithm sarotra ao anatiny izay manangana fanontaniana. Eto Source. Ary tsy misy andiana heuristika be dia be miaraka amin'ny andian-ifs. Noho izany, raha manana roa volana hianarana ianao dia afaka manandrana mahazo ny maritrano.

Miasa tsara ve izany? Tena mandaitra. Indrisy anefa fa sarotra ny manaporofo izany. Tsy afaka milaza aho fa raha mandinika ireo fanontaniana an'arivony misy amin'ny rindranasa lehibe ianao, dia amin'ny ankapobeny dia mahomby kokoa noho ny an'ny mpamorona mahay izy ireo. Ny programmer SQL mahay dia afaka manoratra fanontaniana amin'ny fomba mahomby kokoa, saingy amin'ny fanontaniana an'arivony dia tsy hanana antony manosika na fotoana hanaovana izany izy. Ny hany azoko lazaina izao ho porofon'ny fahombiazana dia ny fisian'ny tetikasa maromaro miasa amin'ny sehatra natsangana amin'ity DBMS ity. rafitra ERP, izay manana fiasa MATERIALIZED an'arivony samihafa, miaraka amin'ny mpampiasa an'arivony sy angon-drakitra terabyte miaraka amin'ny firaketana an-jatony tapitrisa mandeha amin'ny mpizara roa-processor mahazatra. Na izany aza, na iza na iza dia afaka manamarina/mandΓ  ny fahombiazan'ny fampidinana sehatra ary PostgreSQL, mihodina miditra amin'ny fangatahana SQL ary manandrana manova ny lojika sy ny angona ao.

Ao amin'ny lahatsoratra manaraka dia hiresaka momba ny fomba ahafahanao mametraka fameperana amin'ny fiasa, miasa amin'ny fotoam-piovana fanovana, sy ny maro hafa.

Source: www.habr.com

Add a comment