Fa'apaleni tusi ma faitau ile fa'amaumauga

Fa'apaleni tusi ma faitau ile fa'amaumauga
I le taimi muamua tusiga Na ou faʻamatalaina le manatu ma le faʻatinoina o se faʻamaumauga o loʻo fausia i luga o faʻavae o galuega, nai lo laulau ma fanua e pei o faʻamaumauga fesoʻotaʻiga. Na maua ai le tele o faʻataʻitaʻiga e faʻaalia ai le lelei o lenei auala nai lo le masani. E toatele na latou iloa e le o lava lo latou faatalitonuina.

I totonu o lenei tusiga, o le a ou faʻaalia pe faʻapefea ona faʻatagaina oe e lenei manatu e vave ma faigofie le paleni tusitusi ma faitau i le database e aunoa ma se suiga i le faʻaogaina o le faʻaogaina. O galuega fa'atusa sa taumafai e fa'atino i DBMS fa'apisinisi fa'aonaponei (aemaise, Oracle ma Microsoft SQL Server). I le faaiuga o le tusiga o le a ou faʻaalia o mea na latou faia, e faʻamalieina, e leʻi lelei tele.

faʻamatalaga

E pei o le taimi muamua, mo le malamalama atili o le a ou amataina le faʻamatalaga ma faʻataʻitaʻiga. Seʻi tatou fai atu e manaʻomia le faʻatinoina o le faʻaogaina o le a toe faʻafoʻi mai ai se lisi o matagaluega ma le numera o tagata faigaluega i totonu ia i latou ma o latou totogi atoa.

I totonu o se fa'amaumauga tu'ufa'atasiga e pei o lenei:

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

O le lavelave o le faʻatinoina o lenei fesili i soʻo se DBMS o le a tutusa ma O(numera o tagata faigaluega)aua o lenei fa'atusatusaga e mana'omia ai le su'esu'eina o le laulau atoa a tagata faigaluega ona fa'avasega lea i matagaluega. O le a iai foʻi nisi mea laiti (matou te talitonu e tele atu tagata faigaluega nai lo matagaluega) faʻaopoopo e faʻatatau i le fuafuaga filifilia O (numera o tagata faigaluega) poʻo O(numera o matagaluega) mo fa'avasegaga ma isi.

E manino lava o le faʻataunuʻuina i luga e mafai ona ese i DBMS eseese, ae o le lavelave o le a le suia i soo se auala.

I le faʻatinoina o le faʻatinoga, o le DBMS faʻatinoina o le a faʻatupuina se tasi subquery o le a faʻatatauina tulaga manaʻomia mo le matagaluega, ona faia lea o se SOI ma le laulau a le matagaluega e maua ai le igoa. Ae ui i lea, mo galuega taʻitasi, pe a faʻaalia, e mafai ona seti se faʻailoga faʻapitoa MATERIALIZED. O le a otometi lava ona fausia e le faiga se fanua e fetaui mo ia galuega taitasi. Pe a suia le tau o se galuega, o le tau o le fanua o le a suia foi i le fefaʻatauaiga tutusa. A o'o atu i lenei galuega, o le a fa'aogaina le fanua na mua'i fuafuaina.

Aemaise, pe a e setiina MATERIALIZED mo galuega faitau tagata faigaluega и salarySum, ona faʻaopoopoina lea o fanua e lua i le laulau ma le lisi o matagaluega, lea o le a teuina ai le numera o tagata faigaluega ma o latou totogi atoa. Soo se taimi lava e iai se suiga i tagata faigaluega, o latou totogi poʻo soʻotaga matagaluega, o le a otometi lava ona suia e le faiga le tau o nei fanua. O le fesili o loʻo i luga o le a faʻaoga saʻo i nei fanua ma o le a faʻatinoina i totonu O(numera o matagaluega).

O a ni tapulaa? Na o le tasi le mea: o sea galuega e tatau ona i ai se numera faʻatapulaʻa o tau faʻaoga e faʻamatalaina ai lona tau. A leai, o le a le mafai ona fausia se laulau e teuina uma ona tau, talu ai e le mafai ona i ai se laulau ma se numera e le gata o laina.

Faataitaiga:

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

O lenei galuega ua faʻamatalaina mo se numera e le gata o tau o N (mo se faʻataʻitaʻiga, soʻo se tau le lelei e talafeagai). O le mea lea, e le mafai ona e tuʻuina MATERIALIZED i luga. O lea la o se tapulaʻa talafeagai, e le o se mea faʻapitoa (o lona uiga, e le ona o le le mafai ona tatou faʻatinoina). A leai, e leai ni tapulaa. E mafai ona e fa'aogaina fa'avasegaga, fa'avasega, AND ma OR, PARTITION, recursion, etc.

Mo se faʻataʻitaʻiga, i le faʻafitauli 2.2 o le tusiga muamua, e mafai ona e tuʻuina MATERIALIZED i luga o galuega uma e lua:

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;

O le faiga lava ia o le a fatuina se laulau e tasi ma ki ituaiga tagata faʻatau, mea e gaosi и INTEGER, o le a faʻaopoopoina ni fanua se lua i ai ma o le a faʻafouina tulaga taua i totonu ia i latou ma soʻo se suiga. Pe a faia nisi valaʻau i nei galuega, o le a le faʻatatauina, ae o tau o le a faitau mai i fanua tutusa.

I le faʻaaogaina o lenei masini, e mafai, mo se faʻataʻitaʻiga, faʻateʻaina faʻasologa (CTE) i fesili. Aemaise lava, mafaufau i vaega e fausia ai se laʻau e faʻaaoga ai le va o tamaiti ma matua (o vaega taʻitasi e iai se sootaga i ona matua):

parent = DATA Group (Group);

I totonu o se fa'amaumauga tu'ufa'atasiga, e mafai ona fa'amaonia le fa'asologa o le toe fa'afo'i fa'apea:

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;

Talu ai mo le galuega o Matua ua makaina MATERIALIZED, ona faia lea o se laulau e lua ki (vaega) mo ia, lea o le fanua. o Matua o le a moni pe afai o le ki muamua o se tama a le lona lua. Ole numera o fa'amaumauga i lenei laulau o le a tutusa ma le aofa'i o kulupu fa'ateleina ile loloto ole la'au. Afai e te manaʻomia, mo se faʻataʻitaʻiga, e faitau le numera o suli o se vaega, e mafai ona e faʻaogaina lenei galuega:

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

Ole a leai se CTE ile fesili SQL. Ae o le ai ai se GROUP BY faigofie.

I le faʻaaogaina o lenei masini, e mafai foʻi ona e faʻaogaina faigofie le faʻamaumauga pe a manaʻomia:

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

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

Pe a valaʻau se galuega aso mo le laina oka, o le fanua o loʻo i ai se faʻasinomaga o le a faitau mai le laulau ma laina faʻatonu. A suia le aso o le oka, o le a otometi lava ona toe fa'atatau e le faiga lava ia le aso fa'aletonu i le laina.

tulaga lelei

O le a lenei faiga atoa? I DBMS masani, e aunoa ma le toe tusiaina o fesili, e mafai e se tagata atiaeina poʻo le DBA ona suia faʻamatalaga, fuafua fuainumera ma taʻu atu i le faʻasologa o suʻesuʻega pe faʻapefea ona faʻataunuʻuina (ma faʻamatalaga e naʻo avanoa i DBMS pisinisi). E tusa lava po o le a le malosi latou te taumafai ai, o le a le mafai ona latou faʻatumu le fesili muamua i totonu o le tusiga i O (numera o matagaluega) e aunoa ma le suia o fesili poʻo le faʻaopoopoina o faʻaoso. I le fuafuaga fuafuaina, i le tulaga o le atinaʻe e te le tau mafaufau e uiga i le faʻapipiʻiina o faʻamaumauga ma po o fea faʻapotopotoga e faʻaoga. O nei mea uma e mafai ona faigofie ona suia i luga o le lele, tuusaʻo i le gaioiga.

I le faatinoga e pei o lenei. O nisi tagata e atia'e fa'atatau tonu e fa'atatau i le galuega o lo'o i ai. Latou te le malamalama i algorithms ma lo latou lavelave, poʻo fuafuaga faʻatinoina, poʻo ituaiga o faʻatasi, poʻo soʻo se isi mea faʻapitoa. O nei tagata e sili atu le au suʻesuʻe pisinisi nai lo le au atinaʻe. Ona, o nei mea uma e alu i le suʻega poʻo le gaioiga. Fa'aagavaa le fa'amauina o fesili ua leva. A maua se su'esu'ega umi, ona filifili loa lea o isi tagata (sili atu fa'apitoa - o le DBA) e fa'aagaoioi le MATERIALIZED i se galuega fa'avaitaimi. O lenei mea e faʻagesegese ai le puʻeina o sina mea itiiti (talu ai e manaʻomia le faʻafouina o se fanua faaopoopo i le fefaʻatauaiga). Ae ui i lea, e le gata o lenei fesili e matua televave, ae faʻapea foʻi ma isi uma o loʻo faʻaogaina lenei galuega. I le taimi lava e tasi, o le filifili po o le fea galuega e faʻatinoina e faigofie lava. Lua fa'amaufa'ailoga autu: le numera o mea e mafai ona fa'aoga (o le tele o fa'amaumauga o le ai ai i le laulau tutusa), ma le fa'afia ona fa'aaogaina i isi galuega.

Analogs

DBMS fa'apisinisi fa'aonaponei e iai faiga fa'apena: MATERIALIZED VIEW with FAST REFRESH (Oracle) ma INDEXED VIEW (Microsoft SQL Server). I le PostgreSQL, MATERIALIZED VIEW e le mafai ona faʻafouina i se fefaʻatauaiga, ae naʻo luga ole talosaga (ma e oʻo lava i faʻatapulaʻaina faʻatapulaʻa), o lea matou te le mafaufau i ai. Ae e iai a latou faʻafitauli e matua faʻatapulaʻa ai lo latou faʻaaogaina.

Muamua, e mafai ona e faʻatagaina mea faʻapitoa pe afai ua uma ona e faia se VIEW masani. A leai, e tatau ona e toe tusia talosaga o loʻo totoe e maua ai le vaaiga fou na faia e faʻaoga ai lenei faʻamatalaga. Pe tuʻu mea uma e pei ona i ai, ae o le a le aoga pe afai o loʻo i ai ni faʻamatalaga ua uma ona fuafuaina, ae o le tele o fesili e le faʻaaogaina i taimi uma, ae toe faʻatulagaina.

Lona lua, e tele a latou tapulaa:

Oracle

5.3.8.4 Tapulaa Lautele i le Toe Faafouina Anapogi

O le fa'amatalaga fa'amalamalamaga o le va'aiga fa'apitoa e fa'atapula'aina e fa'apea:

  • E le tatau ona i ai i le va'aiga fa'apitoa ni fa'asinomaga i fa'amatalaga e le toe fai fa'apei SYSDATE ma ROWNUM.
  • E le tatau ona iai ni fa'asinomaga i le vaaiga fa'atusa RAW or LONG RAW ituaiga fa'amatalaga.
  • E le mafai ona iai a SELECT lisi subquery.
  • E le mafai ona aofia ai galuega fa'atatau (mo se fa'ata'ita'iga, RANK) i le SELECT fuaiupu.
  • E le mafai ona faasino i se laulau o loo i ai se XMLIndex faasino upu ua faauigaina.
  • E le mafai ona iai a MODEL fuaiupu.
  • E le mafai ona iai a HAVING fuaiupu ma se subquery.
  • E le mafai ona iai ni fesili fa'aaufa'atasi e iai ANY, ALL, po o NOT EXISTS.
  • E le mafai ona iai a [START WITH …] CONNECT BY fuaiupu.
  • E le mafai ona iai ni laulau fa'amatalaga se tele i nofoaga eseese.
  • ON COMMIT e le mafai ona iai ni laulau fa'amatalaga mamao.
  • E tatau ona iai se tu'ufa'atasiga po'o fa'aputuga o fa'aaliga fa'akomepiuta.
  • Fa'atosina tu'u fa'atasi ma fa'atosina fa'atasi fa'atasi ma a GROUP BY e le mafai ona filifili le fuaiupu mai se laulau fa'atulagaina fa'asino.

5.3.8.5 Tapula'a i le Vave Fa'afouina i Va'aiga Fa'atino ma Na'o So'oga

O le fa'amalamalamaina o fesili mo fa'amatalaga fa'apitoa fa'atasi ma na'o fa'atasi ae leai ni fa'aputuga o lo'o iai tapula'a nei ile fa'afouina vave:

  • tapu uma mai «Tapulaa Lautele i le Fa'afou Anapogi".
  • E le mafai ona latou maua GROUP BY fuaiupu po'o fa'apotopotoga.
  • Rowids o laulau uma i le FROM e tatau ona aliali mai le lisi i le SELECT lisi o le fesili.
  • O ogalaau va'aiga fa'apitoa e tatau ona iai fa'atasi ma rowids mo laulau fa'avae uma i le FROM lisi o le fesili.
  • E le mafai ona e faia se va'aiga fa'afouina vave fa'afouina mai le tele o laulau fa'atasi ma fa'aoga faigofie e aofia ai se koluma ituaiga mea i le SELECT faamatalaga.

E le gata i lea, o le auala faʻafouina e te filifilia o le a le sili ona lelei pe afai:

  • O le fa'amatalaga fa'amatalaga e fa'aoga ai se so'oga pito i fafo e amio pei o se so'oga totonu. Afai o le fesili fa'amalamalamaina o lo'o i ai se tu'ufa'atasi, mafaufau e toe tusi le fa'amatalaga fa'amatalaga e aofia ai se so'oga totonu.
  • le SELECT lisi o le vaaiga faʻaalia o loʻo i ai faʻamatalaga i luga o koluma mai laulau e tele.

5.3.8.6 Tapula'a i le Vave Fa'afouina i Va'aiga Fa'atino ma Fa'atasiga

O le fa'amalamalamaina o fesili mo fa'amatalaga fa'anatinati fa'atasi ma fa'aputuga po'o fa'atasi e iai fa'atapula'a nei ile fa'afouina vave:

Fa'afouina vave e lagolagoina mo ia mea uma e lua ON COMMIT ma ON DEMAND manatu fa'aalia, peita'i e fa'aoga tapula'a nei:

  • O laulau uma i le va'aiga fa'ameatino e tatau ona i ai ni ogalaau va'aiga fa'apitoa, ma o lo'o va'aia fa'apitoa e tatau ona:
    • Fa'aaofia uma koluma mai le laulau o lo'o fa'asino i le va'aiga fa'apitoa.
    • Fa'ailoa ma ROWID ma INCLUDING NEW VALUES.
    • Faʻamatala le SEQUENCE fuaiupu pe afai o le laulau e faʻamoemoe e iai se faʻafefiloi o faʻapipiʻi / tuusaʻo-loads, tape, ma faʻafouga.

  • ae SUM, COUNT, AVG, STDDEV, VARIANCE, MIN ma MAX e lagolagoina mo le fa'afouina vave.
  • COUNT(*) e tatau ona faʻamaonia.
  • O galuega fa'aopoopo e tatau ona tupu na'o le vaega pito i fafo o le fa'aaliga. O lona uiga, aggregates e pei o AVG(AVG(x)) or AVG(x)+ AVG(x) e le faatagaina.
  • Mo fa'apotopotoga ta'itasi e pei o AVG(expr), le tutusa COUNT(expr) e tatau ona i ai. E fautuaina e Oracle lena mea SUM(expr) ia faamaoti.
  • If VARIANCE(expr) or STDDEV(expr) ua faʻamaonia, COUNT(expr) ma SUM(expr) e tatau ona faʻamaonia. E fautuaina e Oracle lena mea SUM(expr *expr) ia faamaoti.
  • le SELECT koluma i le fesili fa'amalamalamaina e le mafai ona avea ma fa'amatalaga lavelave ma koluma mai laulau fa'avae e tele. O se fofo e mafai ona faia i lenei mea o le faʻaaogaina lea o se vaaiga faʻapipiʻiina.
  • le SELECT lisi e tatau ona aofia uma GROUP BY koluma.
  • E le fa'avae le va'aiga fa'apitoa ile tasi pe sili atu laulau mamao.
  • Afai e te faʻaaogaina a CHAR ituaiga o faamatalaga i koluma faamama o se ogalaau vaai materialized, o seti uiga o le nofoaga autu ma le vaaiga materialized e tatau ona tutusa.
  • Afai o le va'aiga fa'apitoa e iai se tasi o mea nei, ona fa'aola vave lea e lagolagoina na'o fa'aofi DML masani ma uta sa'o.
    • Manatu faanufau ma MIN or MAX potopotoga
    • Manatu faanufau e iai SUM(expr) ae leai COUNT(expr)
    • Vaaiga tino mai e aunoa ma COUNT(*)

    O lea ituaiga vaaiga ua ta'ua o le insert-only materialized view.

  • O se vaaiga tino mai ma MAX or MIN e vave fa'afouina pe a uma ona tape pe fa'afefiloi fa'amatalaga DML pe a leai se WHERE fuaiupu.
    Ole max/min vave fa'afou pe a uma ona tape pe fa'afefiloi DML e le tutusa le amio ma le fa'aofi-na'o mataupu. Na te tapeina ma toe faʻatulagaina le maualuga / min tau mo vaega ua aʻafia. E tatau ona e nofouta i lona aafiaga o le faatinoga.
  • Va'aiga fa'apitoa fa'atasi ai ma manatu fa'aigoaina po'o subqueries i le FROM e mafai ona vave fa'afouina le fuaiupu pe a mafai ona tu'ufa'atasia uma manatu. Mo fa'amatalaga po'o fea manatu o le a tu'ufa'atasia, va'ai Oracle Database SQL Language Reference.
  • Afai e leai ni feso'ota'iga i fafo, e mafai ona i ai sau filifiliga ma fa'atasi i totonu o le WHERE fuaiupu.
  • O vaaiga fa'apitoa fa'atasi ma so'oga i fafo e vave fa'afou pe a mae'a DML masani ma uta tu'usa'o, pe a na'o le laulau i fafo ua suia. E le gata i lea, e tatau ona iai ni fa'alavelave fa'apitoa i koluma fa'atasi o le laulau fa'atasi i totonu. Afai e iai so'oga i fafo, e tatau ona fa'afeso'ota'i uma so'oga ANDs ma e tatau ona faʻaaoga le tutusa (=) tagata faigaluega.
  • Mo fa'aaliga fa'atino ma CUBE, ROLLUP, fa'avasegaina o seti, po'o le tu'ufa'atasia o i latou, o fa'atapula'a nei e fa'aaoga:
    • le SELECT lisi e tatau ona i ai fa'avasega fa'avasegaina e mafai ona a GROUPING_ID galuega i mea uma GROUP BY fa'aaliga po'o GROUPING galuega e tasi mo le tasi GROUP BY fa'aaliga. Mo se faataitaiga, afai o le GROUP BY fuaiupu o le vaaiga faʻaalia o le "GROUP BY CUBE(a, b)", ona sosoo ai lea ma le SELECT lisi e tatau ona i ai a le "GROUPING_ID(a, b)"po'o"GROUPING(a) AND GROUPING(b)»mo le vaaiga fa'atagata ina ia vave fa'afouina.
    • GROUP BY e le tatau ona i'u i ni fa'avasegaga fa'alua. Faataitaiga, "GROUP BY a, ROLLUP(a, b)"e le vave fa'afouina ona e maua ai fa'alua fa'avasegaga"(a), (a, b), AND (a)".

5.3.8.7 Tapula'a i le Vave Fa'afouina i Va'aiga Fa'atino ma UNION ALL

Fa'atino manatu fa'atasi ma le UNION ALL seti tagata faigaluega lagolago le REFRESH FAST filifiliga pe a faamalieina tulaga nei:

  • O le fesili fa'amalamalamaina e tatau ona iai le UNION ALL tagata faigaluega ile tulaga maualuga.

    le UNION ALL e le mafai ona fa'apipi'i i totonu o se subquery, fa'atasi ai ma le tasi: O le UNION ALL e mafai ona i se subquery i le FROM Fuaiupu pe a tu'uina atu o le fa'amatalaga fa'amatalaga o le fomu SELECT * FROM (va'ai po'o su'esu'e ma UNION ALL) e pei o le faʻataʻitaʻiga lenei:

    FAITAU VAAIGA view_with_unionall AS (FILIFILI c.rowid crid, c.cust_id, 2 umarker MAI tagata faatau c WHERE c.cust_last_name = 'Smith' UNION FILIFI uma c.rowid crid, c.cust_id, 3 umarker MAI tagata faatau c WHERE c.cust_last_name = 'Jones'); FAITAU MATERIALIZED VIEW unionall_inside_view_mv TOE FAAVAE FAAVAE I LE FA'A'OGA A'I FILIFILI * MAI view_with_unionall;
    

    Manatua o le vaaiga view_with_unionall fa'amalieina mana'oga mo le fa'afouina vave.

  • O poloka fesili taitasi i totonu o le UNION ALL ole fesili e tatau ona fa'amalieina mana'oga o se va'aiga fa'aola vave fa'afou fa'atasi ma fa'aputuga po'o se va'aiga fa'aola vave fa'afou fa'atasi ma so'o.

    E tatau ona fau i luga o laulau e pei ona mana'omia mo le ituaiga fa'atusa o le va'aiga fa'afouina vave.
    Manatua o le Oracle Database e mafai foi ona faʻatagaina le tulaga faʻapitoa o se laulau e tasi faʻaalia vaaiga faʻatasi ma faʻatasi naʻo le ROWID koluma ua aofia i le SELECT lisi ma i totonu o le faʻamatalaga faʻapitoa. O loʻo faʻaalia lea i le faʻamatalaga faʻamatalaga o le vaaiga view_with_unionall.

  • le SELECT lisi o fesili taitasi e tatau ona aofia ai se UNION ALL maka, ma le UNION ALL koluma e tatau ona i ai se numera ma'oti tumau po'o se manoa taua i totonu o mea taitasi UNION ALL lala. E le gata i lea, e tatau ona aliali mai le koluma maka i le tulaga tutusa i le SELECT lisi o poloka fesili taitasi. Va'ai"UNION UMA Maka ma Fesili Toe tusi»mo nisi fa'amatalaga e uiga i UNION ALL faʻailoga.
  • O nisi vaega e pei o so'oga i fafo, fa'aofi-na'o fa'aputuga su'esu'ega va'aiga fa'apitoa ma laulau mamao e le lagolagoina mo va'aiga fa'apitoa ma UNION ALL. Manatua, peitaʻi, o manatu faʻaalia o loʻo faʻaaogaina i le toe faia, e le o iai ni faʻatasi poʻo ni faʻaopoopoga, e mafai ona vave faʻafouina pe a UNION ALL pe fa'aaoga laulau mamao.
  • E tatau ona seti le parakalafa amata fa'afetaui i le 9.2.0 po'o le maualuga e fatu ai se va'aiga fa'afouina vave fa'afouina ma UNION ALL.

Ou te le manaʻo e faʻatiga Oracle fans, ae faʻamasinoina e ala i la latou lisi o tapulaʻa, e foliga mai o lenei masini e leʻi tusia i le tulaga lautele, e faʻaaoga ai se ituaiga o faʻataʻitaʻiga, ae e afe ma afe o Initia, lea na maua ai e tagata uma le avanoa e tusi a latou lava lala, ma sa taitasi i latou ma faia le mea na te mafaia. O le faʻaaogaina o lenei masini mo le faʻatatau moni e pei o le savali i totonu o se maina. E mafai ona e maua se maina i soo se taimi e ala i le taina o se tasi o tapulaʻa e le o manino. O le auala e galue ai o se fesili ese foi, ae e sili atu i le lautele o lenei tusiga.

Microsoft SQLServer

Manaoga Faaopoopo

I le faʻaopoopoga i filifiliga SET ma manaʻoga faʻapitoa, o manaʻoga nei e tatau ona ausia:

  • Le tagata fa'aoga e fa'atino CREATE INDEX e tatau ona avea ma e ona le vaaiga.
  • A e fatuina le faasino igoa, o le IGNORE_DUP_KEY e tatau ona seti le filifiliga i le OFF (le tulaga faaletonu).
  • O laulau e tatau ona fa'asino i igoa e lua-vaega, polokalame.igoa laulau i le faʻamatalaga vaʻaia.
  • O galuega e fa'asinoina e le tagata e fa'asino i le va'aiga e tatau ona faia e ala i le fa'aogaina o le WITH SCHEMABINDING filifiliga.
  • So'o se galuega fa'auiga e fa'asino i le va'aiga e tatau ona fa'asino i igoa e lua-vaega, ..
  • O le meatotino maua fa'amatalaga o se galuega fa'asinomaga e tatau ona NO SQL, ma meatotino avanoa i fafo e tatau ona NO.
  • E mafai ona fa'aalia galuega masani o le gagana ta'avale (CLR) i le lisi filifilia o le va'aiga, ae le mafai ona avea ma se vaega o le fa'auigaina o le ki fa'asino fa'apipi'i. O galuega a le CLR e le mafai ona fa'aalia i le WHERE fuaiupu o le va'aiga po'o le ON fuaiupu o se galuega JOIN i le va'aiga.
  • O galuega a le CLR ma metotia o ituaiga e fa'aogaina e le tagata fa'aoga o lo'o fa'aogaina i le fa'amatalaga va'aiga e tatau ona i ai fa'atonuga fa'atulagaina e pei ona fa'aalia i le siata o lo'o mulimuli mai.

    meatotino
    tusi

    FAATUATUA = MONI
    E tatau ona fa'ailoa manino o se uiga o le Microsoft .NET Framework method.

    SAO = MONI
    E tatau ona fa'ailoa manino o se uiga o le .NET Framework method.

    FA'AMATALAGA ACCESS = LEAI SQL
    Fuafuaina e ala i le setiina o le DataAccess attribute i le DataAccessKind.None ma le SystemDataAccess attribute i SystemDataAccessKind.None.

    AUALA I FAFO = LEAI
    O lenei meatotino e fa'aletonu ile NO mo faiga masani a CLR.

  • O le vaaiga e tatau ona faia i le faʻaaogaina o le WITH SCHEMABINDING filifiliga.
  • O le vaaiga e tatau ona faasino na'o laulau faavae o lo'o i totonu o fa'amaumauga tutusa ma le va'aiga. O le vaaiga e le mafai ona faasino i isi manatu.
  • Ole fa'amatalaga SELECT ile fa'amatalaga va'aiga e le tatau ona aofia ai elemene Transact-SQL nei:

    COUNT
    galuega a ROWSET (OPENDATASOURCE, OPENQUERY, OPENROWSET, MA OPENXML)
    OUTER auai (LEFT, RIGHT, po o FULL)

    Fuafuaga laulau (fa'amatala fa'amaoti a SELECT faamatalaga i le FROM fuaiupu)
    Fa'atasia e le tagata lava ia
    Fa'atonu koluma i le fa'aogaina SELECT * or SELECT <table_name>.*

    DISTINCT
    STDEV, STDEVP, VAR, VARP, po o AVG
    Fa'amatalaga masani laulau (CTE)

    felelei1, matua, ntext, faʻatusa, XML, po o filestream koluma
    Su'esu'ega
    OVER fuaiupu, lea e aofia ai le fa'avasegaina po'o le tu'ufa'atasiga o galuega fa'amalama

    Fa'ailoga o tusitusiga atoa (CONTAINS, FREETEXT)
    SUM galuega e fa'asino i se fa'amatalaga nullable
    ORDER BY

    CLR fa'aoga-fa'aogaina tu'ufa'atasi galuega
    TOP
    CUBE, ROLLUP, po o GROUPING SETS tagata faigaluega

    MIN, MAX
    UNION, EXCEPT, po o INTERSECT tagata faigaluega
    TABLESAMPLE

    Fuafuaga laulau
    OUTER APPLY or CROSS APPLY
    PIVOT, UNPIVOT

    Seti koluma seasea
    Inline (TVF) po'o le tele o fa'amatalaga fa'atatau ile laulau (MSTVF)
    OFFSET

    CHECKSUM_AGG

    1 E mafai ona iai i le va'aiga fa'asino igoa felelei koluma; ae ui i lea, o ia koluma e le mafai ona aofia i le ki fa'asino igoa.

  • If GROUP BY o lo'o iai, o le fa'amatalaga VIEW e tatau ona iai COUNT_BIG(*) ma e le tatau ona aofia ai HAVING. nei GROUP BY fa'atapula'a e fa'atatau i na'o le fa'auigaina o le va'aiga fa'asino. E mafai e se su'esu'ega ona fa'aoga se va'aiga fa'asino i lana fuafuaga fa'atino tusa lava pe le fa'amalieina ai GROUP BY tapulaa.
  • Afai o le fa'amatalaga va'aiga o lo'o iai a GROUP BY fuaiupu, o le ki o le fa'ailoga tu'ufa'atasi tu'ufa'atasi e mafai ona fa'asino i na'o koluma fa'amaoti mai i le GROUP BY fuaiupu.

E manino mai i inei e leʻi aafia ai tagata Initia, talu ai na latou filifili e faia e tusa ai ma le fuafuaga "o le a tatou faia se mea itiiti, ae lelei." O lona uiga, e tele a latou maina i luga o le fanua, ae o lo latou nofoaga e sili atu ona manino. O le mea e sili ona le fiafia o le tapulaa lea:

O le vaaiga e tatau ona faasino na'o laulau faavae o lo'o i totonu o fa'amaumauga tutusa ma le va'aiga. O le vaaiga e le mafai ona faasino i isi manatu.

I a tatou faaupuga, o lona uiga e le mafai e se galuega ona maua se isi galuega faʻatino. O lenei mea e faʻaumatia ai manatu uma i le fuga.
E le gata i lea, o lenei tapulaʻa (ma isi mea i totonu o tusitusiga) e faʻaitiitia ai le faʻaogaina o mataupu:

Ole fa'amatalaga SELECT ile fa'amatalaga va'aiga e le tatau ona aofia ai elemene Transact-SQL nei:

COUNT
galuega a ROWSET (OPENDATASOURCE, OPENQUERY, OPENROWSET, MA OPENXML)
OUTER auai (LEFT, RIGHT, po o FULL)

Fuafuaga laulau (fa'amatala fa'amaoti a SELECT faamatalaga i le FROM fuaiupu)
Fa'atasia e le tagata lava ia
Fa'atonu koluma i le fa'aogaina SELECT * or SELECT <table_name>.*

DISTINCT
STDEV, STDEVP, VAR, VARP, po o AVG
Fa'amatalaga masani laulau (CTE)

felelei1, matua, ntext, faʻatusa, XML, po o filestream koluma
Su'esu'ega
OVER fuaiupu, lea e aofia ai le fa'avasegaina po'o le tu'ufa'atasiga o galuega fa'amalama

Fa'ailoga o tusitusiga atoa (CONTAINS, FREETEXT)
SUM galuega e fa'asino i se fa'amatalaga nullable
ORDER BY

CLR fa'aoga-fa'aogaina tu'ufa'atasi galuega
TOP
CUBE, ROLLUP, po o GROUPING SETS tagata faigaluega

MIN, MAX
UNION, EXCEPT, po o INTERSECT tagata faigaluega
TABLESAMPLE

Fuafuaga laulau
OUTER APPLY or CROSS APPLY
PIVOT, UNPIVOT

Seti koluma seasea
Inline (TVF) po'o le tele o fa'amatalaga fa'atatau ile laulau (MSTVF)
OFFSET

CHECKSUM_AGG

OUTER JOINS, UNION, ORDER BY ma isi e faʻasaina. Atonu e sili atu ona faigofie le faʻamalamalamaina o mea e mafai ona faʻaaogaina nai lo le mea e le mafai ona faʻaaogaina. Atonu o le a laʻititi tele le lisi.

I se aotelega: o se seti tele o tapulaʻa i soʻo se (seʻi matau pisinisi) DBMS vs leai se (sei vagana ai se tasi talafeagai, e le faʻapitoa) i tekinolosi LGPL. Ae ui i lea, e tatau ona maitauina o le faʻatinoina o lenei masini i le fesoʻotaʻiga fesoʻotaʻiga e sili atu le faigata nai lo le faʻamatalaina o le faʻaogaina o galuega.

Реализация

E faapefea ona aoga? PostgreSQL o loʻo faʻaaogaina e avea o se "masini virtual". E i ai se algorithm lavelave i totonu e fausia ai fesili. O iinei punavai. Ma e le na'o se seti tele o heuristics ma le tele o ifs. O lea la, afai e iai ni nai masina e te suʻesuʻe ai, e mafai ona e taumafai e malamalama ile tusiata.

E aoga ea? E matua aoga lava. Ae paga lea, e faigata ona faʻamaonia lenei mea. E mafai ona ou fai atu pe afai e te mafaufau i le faitau afe o fesili o loʻo i ai i totonu o talosaga tetele, o lona uiga i le averesi e sili atu le lelei nai lo le atinaʻe lelei. O se tagata fai polokalame SQL sili ona lelei e mafai ona tusia soʻo se fesili e sili atu ona lelei, ae faʻatasi ai ma le afe fesili o le a le maua ai se faʻamalosi poʻo se taimi e fai ai. Pau lava le mea e mafai ona ou taʻua nei o se faʻamaoniga o le aoga o le tele o poloketi o loʻo galulue i luga o le faʻavae ua fausia i luga o lenei DBMS faiga ERP, o loʻo i ai le faitau afe o galuega MATERIALIZED eseese, faʻatasi ai ma le faitau afe o tagata faʻaoga ma faʻamaumauga terabyte ma le faitau selau miliona o faʻamaumauga o loʻo taʻavale i luga o se server masani e lua-processor. Ae ui i lea, e mafai e soʻo se tasi ona siaki / faʻamaonia le aoga e ala i le siiina mai tulaga ma PostgreSQL, fa'aola logging fesili SQL ma taumafai e sui le manatu ma faamatalaga iina.

I tala o loʻo mulimuli mai, o le a ou talanoa foi e uiga i le auala e mafai ai ona e setiina tapulaʻa i galuega, galue ma suiga o sauniga, ma sili atu.

puna: www.habr.com

Faaopoopo i ai se faamatalaga