Iwontunwonsi kọ ati ka ninu aaye data kan

Iwontunwonsi kọ ati ka ninu aaye data kan
Ni išaaju article Mo ṣe apejuwe imọran ati imuse ti data data ti a ṣe lori ipilẹ awọn iṣẹ, dipo awọn tabili ati awọn aaye bi ninu awọn apoti isura data ibatan. O pese ọpọlọpọ awọn apẹẹrẹ ti o nfihan awọn anfani ti ọna yii ju ti kilasika lọ. Ọpọlọpọ rii pe wọn ko ni idaniloju to.

Ninu nkan yii, Emi yoo ṣafihan bii imọran yii ṣe gba ọ laaye lati ni iwọntunwọnsi ni irọrun ati ni irọrun awọn kikọ ati ka si ibi ipamọ data laisi eyikeyi iyipada ninu ọgbọn iṣẹ. Išẹ ti o jọra ni a ti gbiyanju lati ṣe imuse ni awọn DBMS ti iṣowo ode oni (ni pataki, Oracle ati Microsoft SQL Server). Ni ipari ti nkan naa Emi yoo fihan pe ohun ti wọn ṣe, lati fi sii ni irẹlẹ, ko ṣiṣẹ daradara.

Apejuwe

Gẹgẹbi iṣaaju, fun oye to dara julọ Emi yoo bẹrẹ apejuwe pẹlu awọn apẹẹrẹ. Jẹ ki a sọ pe a nilo lati ṣe ilana ọgbọn ti yoo da atokọ ti awọn apa pada pẹlu nọmba awọn oṣiṣẹ ninu wọn ati owo-oṣu lapapọ wọn.

Ninu aaye data iṣẹ kan yoo dabi eyi:

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

Idiju ti ṣiṣe ibeere yii ni eyikeyi DBMS yoo jẹ deede si O (nọmba awọn oṣiṣẹ)nitori iṣiro yii nilo ọlọjẹ gbogbo tabili awọn oṣiṣẹ ati lẹhinna akojọpọ wọn nipasẹ ẹka. Awọn kekere yoo tun wa (a gbagbọ pe ọpọlọpọ awọn oṣiṣẹ diẹ sii ju awọn ẹka) afikun da lori ero ti o yan O(nọmba akọọlẹ ti awọn oṣiṣẹ) tabi O (nọmba awọn ẹka) fun kikojọpọ ati be be lo.

O han gbangba pe ipaniyan lori le jẹ iyatọ ni oriṣiriṣi DBMS, ṣugbọn idiju kii yoo yipada ni eyikeyi ọna.

Ninu imuse ti a dabaa, DBMS ti iṣẹ-ṣiṣe yoo ṣe agbekalẹ ipilẹ kan ti yoo ṣe iṣiro awọn iye ti o nilo fun ẹka naa, ati lẹhinna ṣe JOIN pẹlu tabili ẹka lati gba orukọ naa. Bibẹẹkọ, fun iṣẹ kọọkan, nigbati o ba n kede, o ṣee ṣe lati ṣeto ami ami MATERIALIZED pataki kan. Eto naa yoo ṣẹda aaye ti o baamu laifọwọyi fun iru iṣẹ kọọkan. Nigbati o ba yipada iye iṣẹ kan, iye aaye naa yoo tun yipada ni idunadura kanna. Nigbati o ba n wọle si iṣẹ yii, aaye ti a ṣe iṣiro tẹlẹ yoo wọle.

Ni pataki, ti o ba ṣeto MATERIALIZED fun awọn iṣẹ awọn oṣiṣẹ и ekunwoSum, lẹhinna awọn aaye meji yoo wa ni afikun si tabili pẹlu akojọ awọn ẹka, eyi ti yoo tọju nọmba awọn oṣiṣẹ ati apapọ owo-owo wọn. Nigbakugba ti iyipada ba wa ninu awọn oṣiṣẹ, owo osu wọn tabi awọn ibatan ẹka, eto naa yoo yi awọn iye ti awọn aaye wọnyi pada laifọwọyi. Ibeere ti o wa loke yoo wọle si awọn aaye wọnyi taara ati pe yoo ṣiṣẹ ni O (nọmba awọn ẹka).

Kini awọn ihamọ naa? Ohun kan ṣoṣo: iru iṣẹ kan gbọdọ ni nọmba ipari ti awọn iye titẹ sii eyiti iye rẹ jẹ asọye. Bibẹẹkọ, kii yoo ṣee ṣe lati kọ tabili kan ti o tọju gbogbo awọn iye rẹ, nitori ko le jẹ tabili pẹlu nọmba ailopin ti awọn ori ila.

Apeere:

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

Iṣẹ yii jẹ asọye fun nọmba ailopin ti awọn iye N (fun apẹẹrẹ, eyikeyi iye odi dara). Nitorinaa, o ko le fi MATERIALIZED sori rẹ. Nitorinaa eyi jẹ aropin ọgbọn, kii ṣe imọ-ẹrọ (iyẹn, kii ṣe nitori a ko le ṣe imuse). Bibẹẹkọ, ko si awọn ihamọ. O le lo awọn akojọpọ, tito lẹsẹsẹ, AND ati OR, PARTITION, recursion, etc.

Fun apẹẹrẹ, ninu iṣoro 2.2 ti nkan ti tẹlẹ, o le fi MATERIALIZED sori awọn iṣẹ mejeeji:

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;

Eto naa funrararẹ yoo ṣẹda tabili kan pẹlu awọn bọtini iru onibara, Ọja и INTEGER, yoo ṣafikun awọn aaye meji si rẹ ati pe yoo ṣe imudojuiwọn awọn iye aaye ninu wọn pẹlu awọn ayipada eyikeyi. Nigbati a ba ṣe awọn ipe siwaju si awọn iṣẹ wọnyi, wọn kii yoo ṣe iṣiro, ṣugbọn dipo awọn iye yoo ka lati awọn aaye ti o baamu.

Lilo ẹrọ yii, o le, fun apẹẹrẹ, yọkuro awọn atunṣe (CTE) ni awọn ibeere. Ni pataki, ronu awọn ẹgbẹ ti o ṣẹda igi nipa lilo ibatan ọmọ / obi (ẹgbẹ kọọkan ni ọna asopọ si obi rẹ):

parent = DATA Group (Group);

Ninu aaye data ti iṣẹ-ṣiṣe, ọgbọn atunwi le jẹ pato gẹgẹbi atẹle:

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;

Niwon fun iṣẹ naa ni Obi ti samisi MATERIALIZED, lẹhinna tabili kan pẹlu awọn bọtini meji (awọn ẹgbẹ) yoo ṣẹda fun rẹ, ninu eyiti aaye naa ni Obi yoo jẹ otitọ nikan ti bọtini akọkọ ba jẹ ọmọ ti keji. Nọmba awọn titẹ sii inu tabili yii yoo jẹ dogba si nọmba awọn ẹgbẹ ti a pọ nipasẹ iwọn aropin ti igi naa. Ti o ba nilo, fun apẹẹrẹ, lati ka nọmba awọn ọmọ ẹgbẹ kan, o le lo iṣẹ yii:

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

Ko si CTE ninu ibeere SQL. Dipo nibẹ ni yio je kan awọn GROUP BY.

Lilo ẹrọ yii, o tun le ni rọọrun sọ ibi ipamọ data di ipo ti o ba jẹ dandan:

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

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

Nigba pipe iṣẹ kan ọjọ fun laini aṣẹ, aaye fun eyiti atọka wa yoo ka lati tabili pẹlu awọn laini aṣẹ. Nigbati ọjọ aṣẹ ba yipada, eto naa funrararẹ yoo ṣe atunto ọjọ ti ko ni iwọn ni laini laifọwọyi.

Anfani

Kini gbogbo ẹrọ yi fun? Ninu awọn DBMS Ayebaye, laisi awọn ibeere atunko, olupilẹṣẹ tabi DBA le yipada awọn atọka nikan, pinnu awọn iṣiro ki o sọ fun oluṣeto ibeere bi o ṣe le ṣiṣẹ wọn (ati awọn HINT wa nikan ni awọn DBMS ti iṣowo). Laibikita bawo ni wọn ṣe le, wọn kii yoo ni anfani lati pari ibeere akọkọ ninu nkan inu O (nọmba awọn ẹka) laisi iyipada awọn ibeere tabi ṣafikun awọn okunfa. Ninu ero ti a dabaa, ni ipele idagbasoke o ko ni lati ronu nipa eto ibi ipamọ data ati iru awọn akojọpọ lati lo. Gbogbo eyi le yipada ni rọọrun lori fifo, taara ni iṣẹ.

Ni iṣe o dabi eyi. Diẹ ninu awọn eniyan ni idagbasoke ọgbọn taara da lori iṣẹ-ṣiṣe ti o wa ni ọwọ. Wọn ko loye awọn algoridimu ati idiju wọn, tabi awọn ero ipaniyan, tabi awọn iru awọn idapọ, tabi eyikeyi paati imọ-ẹrọ miiran. Awọn eniyan wọnyi jẹ awọn atunnkanka iṣowo diẹ sii ju awọn olupilẹṣẹ lọ. Lẹhinna, gbogbo eyi lọ sinu idanwo tabi iṣẹ. Mu ṣiṣẹ gedu ti awọn ibeere ti nṣiṣẹ pipẹ. Nigbati a ba rii ibeere gigun, lẹhinna awọn eniyan miiran (imọ-ẹrọ diẹ sii - pataki DBA) pinnu lati mu MATERIALIZED ṣiṣẹ lori iṣẹ agbedemeji kan. Eyi fa fifalẹ gbigbasilẹ diẹ (niwọn igba ti o nilo imudojuiwọn aaye afikun ninu idunadura naa). Sibẹsibẹ, kii ṣe ibeere yii nikan ni iyara ni pataki, ṣugbọn tun gbogbo awọn miiran ti o lo iṣẹ yii. Ni akoko kanna, ṣiṣe ipinnu iṣẹ wo ni o rọrun. Awọn paramita akọkọ meji: nọmba awọn iye titẹ sii ti o ṣeeṣe (eyi ni iye awọn igbasilẹ yoo wa ninu tabili ti o baamu), ati iye igba ti o lo ni awọn iṣẹ miiran.

Awọn afọwọṣe

Awọn DBMS ti iṣowo ode oni ni awọn ọna ṣiṣe ti o jọra: IWỌ TI AWỌN ỌJỌ pẹlu ITUTU FAST (Oracle) ati VIEW INDEXED (Olupin Microsoft SQL). Ni PostgreSQL, MATERIALIZED VIEW ko le ṣe imudojuiwọn ni idunadura kan, ṣugbọn lori ibeere nikan (ati paapaa pẹlu awọn ihamọ ti o muna pupọ), nitorinaa a ko gbero rẹ. Ṣugbọn wọn ni awọn iṣoro pupọ ti o ṣe idiwọn lilo wọn ni pataki.

Ni akọkọ, o le mu ohun elo ṣiṣẹ nikan ti o ba ti ṣẹda WO deede. Bibẹẹkọ, iwọ yoo ni lati tunkọ awọn ibeere to ku lati wọle si wiwo tuntun ti a ṣẹda lati lo isọdi-ara yii. Tabi fi ohun gbogbo silẹ bi o ti jẹ, ṣugbọn o kere ju ailagbara ti o ba wa awọn data ti a ti ṣaju tẹlẹ, ṣugbọn ọpọlọpọ awọn ibeere ko nigbagbogbo lo, ṣugbọn tun ṣe iṣiro rẹ.

Ni ẹẹkeji, wọn ni nọmba nla ti awọn ihamọ:

Ebora

5.3.8.4 Gbogbogbo Awọn ihamọ lori Yara Sọ

Ibeere asọye ti wiwo ohun elo ti ni ihamọ bi atẹle:

  • Wiwo ohun elo ko gbọdọ ni awọn itọka si awọn ọrọ ti kii ṣe atunwi bii SYSDATE ati ROWNUM.
  • Wiwo ohun elo ko gbọdọ ni awọn itọkasi ninu RAW or LONG RAW data orisi.
  • Ko le ni a SELECT akojọ subquery.
  • Ko le ni awọn iṣẹ itupalẹ ninu (fun apẹẹrẹ, RANK) nínú SELECT ipinnu.
  • Ko le ṣe itọkasi tabili lori eyiti ẹya XMLIndex atọka ti wa ni asọye.
  • Ko le ni a MODEL ipinnu.
  • Ko le ni a HAVING gbolohun ọrọ pẹlu kan subquery.
  • Ko le ni awọn ibeere itẹ-ẹiyẹ ti o ni ANY, ALL, tabi NOT EXISTS.
  • Ko le ni a [START WITH …] CONNECT BY ipinnu.
  • Ko le ni awọn tabili alaye lọpọlọpọ ni awọn aaye oriṣiriṣi.
  • ON COMMIT Awọn iwo ohun elo ko le ni awọn tabili alaye latọna jijin.
  • Awọn iwo ohun elo ti o ni itẹ-ẹiyẹ gbọdọ ni idapọ tabi apapọ.
  • Awọn iwo idapọ ti ohun elo ati awọn iwo apapọ ohun elo pẹlu kan GROUP BY gbolohun ọrọ ko le yan lati inu tabili ti a ṣeto si atọka.

5.3.8.5 Awọn ihamọ lori isọdọtun Yara lori Awọn iwo Ohun elo pẹlu Awọn Isopọpọ nikan

Itumọ awọn ibeere fun awọn iwo ohun elo pẹlu awọn idapọ nikan ko si si awọn akojọpọ ni awọn ihamọ wọnyi lori isọdọtun yara:

  • Gbogbo awọn ihamọ lati «Gbogbogbo Awọn ihamọ lori Yara Sọ".
  • Wọn ko le ni GROUP BY awọn gbolohun ọrọ tabi awọn akojọpọ.
  • Rowids ti gbogbo awọn tabili ninu awọn FROM akojọ gbọdọ han ninu awọn SELECT akojọ ti awọn ìbéèrè.
  • Awọn igbasilẹ wiwo ohun elo gbọdọ wa pẹlu awọn ori ila fun gbogbo awọn tabili ipilẹ ninu FROM akojọ ti awọn ìbéèrè.
  • O ko le ṣẹda wiwo ohun elo isọdọtun ni iyara lati awọn tabili pupọ pẹlu awọn idapọ ti o rọrun ti o pẹlu iru iwe ohun kan ninu SELECT gbólóhùn.

Paapaa, ọna isọdọtun ti o yan kii yoo ṣiṣẹ ni aipe ti o ba:

  • Ibeere asọye nlo isọdọmọ ita ti o huwa bi isọdọmọ inu. Ti ibeere asọye ba ni iru isọpọ kan, ronu lati tun ibeere asọye kọ lati ni idapọ inu ninu.
  • awọn SELECT atokọ ti wiwo ohun elo ni awọn ikosile lori awọn ọwọn lati awọn tabili pupọ.

5.3.8.6 Awọn ihamọ lori isọdọtun Yara lori Awọn iwo Ohun elo pẹlu Awọn akojọpọ

Itumọ awọn ibeere fun awọn iwo ohun elo pẹlu awọn akojọpọ tabi awọn akojọpọ ni awọn ihamọ wọnyi lori isọdọtun yara:

Isọdọtun yara jẹ atilẹyin fun awọn mejeeji ON COMMIT ati ON DEMAND awọn iwo ohun elo, sibẹsibẹ awọn ihamọ wọnyi lo:

  • Gbogbo awọn tabili ti o wa ninu wiwo ohun elo gbọdọ ni awọn iforukọsilẹ wiwo ohun elo, ati awọn iwe wiwo ohun elo gbọdọ:
    • Ni gbogbo awọn ọwọn lati tabili itọkasi ni wiwo ohun elo.
    • Pato pẹlu ROWID ati INCLUDING NEW VALUES.
    • Pato awọn SEQUENCE gbolohun ọrọ ti o ba jẹ pe tabili yẹ ki o ni akojọpọ awọn ifibọ/awọn ẹru-taara, paarẹ, ati awọn imudojuiwọn.

  • nikan SUM, COUNT, AVG, STDDEV, VARIANCE, MIN ati MAX ti wa ni atilẹyin fun yara isọdọtun.
  • COUNT(*) gbọdọ wa ni pato.
  • Awọn iṣẹ apapọ gbọdọ waye nikan bi apakan ita ti ikosile naa. Iyẹn ni, awọn akojọpọ bii AVG(AVG(x)) or AVG(x)+ AVG(x) ko ba gba laaye.
  • Fun akojọpọ kọọkan gẹgẹbi AVG(expr), awọn ti o baamu COUNT(expr) gbọdọ jẹ bayi. Oracle ṣe iṣeduro iyẹn SUM(expr) wa ni pato.
  • If VARIANCE(expr) or STDDEV(expr) ni pato, COUNT(expr) ati SUM(expr) gbọdọ wa ni pato. Oracle ṣe iṣeduro iyẹn SUM(expr *expr) wa ni pato.
  • awọn SELECT iwe ninu ibeere asọye ko le jẹ ikosile eka pẹlu awọn ọwọn lati awọn tabili ipilẹ pupọ. Iṣeduro ti o ṣeeṣe si eyi ni lati lo wiwo ohun elo ti itẹ-ẹiyẹ.
  • awọn SELECT akojọ gbọdọ ni gbogbo GROUP BY awọn ọwọn.
  • Wiwo ohun elo ko da lori ọkan tabi diẹ ẹ sii awọn tabili latọna jijin.
  • Ti o ba lo kan CHAR Iru data ninu awọn ọwọn àlẹmọ ti iwe wiwo ohun elo, awọn eto ihuwasi ti aaye titunto si ati wiwo ohun elo gbọdọ jẹ kanna.
  • Ti wiwo ohun elo ba ni ọkan ninu awọn atẹle, lẹhinna isọdọtun yara jẹ atilẹyin nikan lori awọn ifibọ DML aṣa ati awọn ẹru taara.
    • Awọn iwo ohun elo pẹlu MIN or MAX awọn akopọ
    • Materialized wiwo eyi ti o ni SUM(expr) ṣugbọn rara COUNT(expr)
    • Materialized wiwo lai COUNT(*)

    Iru wiwo ohun elo ni a pe ni wiwo ohun elo ti a fi sii-nikan.

  • A materialized wiwo pẹlu MAX or MIN jẹ isọdọtun iyara lẹhin piparẹ tabi awọn alaye DML dapọ ti ko ba ni a WHERE ipinnu.
    Itumọ iyara ti o pọju/min lẹhin piparẹ tabi DML ti o dapọ ko ni ihuwasi kanna bi ọran ifibọ-nikan. O paarẹ ati ṣe iṣiro awọn iye max/min fun awọn ẹgbẹ ti o kan. O nilo lati mọ ipa iṣẹ rẹ.
  • Awọn iwo ohun elo pẹlu awọn iwo ti a daruko tabi awọn ibeere ni inu FROM gbolohun le jẹ isọdọtun ni kiakia ti awọn iwo naa le ṣe idapọpọ patapata. Fun alaye lori iru awọn iwo yoo dapọ, wo Oracle aaye data SQL Itọkasi Ede.
  • Ti ko ba si awọn akojọpọ ita, o le ni awọn yiyan lainidii ati darapọ mọ WHERE ipinnu.
  • Awọn iwo apapọ ti ohun elo pẹlu awọn akojọpọ ita jẹ isọdọtun ni iyara lẹhin DML ti aṣa ati awọn ẹru taara, ti o ba jẹ pe tabili ita nikan ti ni atunṣe. Paapaa, awọn ihamọ alailẹgbẹ gbọdọ wa lori awọn ọwọn idapọ ti tabili idapọ inu. Ti awọn akojọpọ ita ba wa, gbogbo awọn akojọpọ gbọdọ wa ni asopọ nipasẹ ANDs ati pe o gbọdọ lo imudogba (=) oniṣẹ ẹrọ.
  • Fun materialized wiwo pẹlu CUBE, ROLLUP, awọn akojọpọ akojọpọ, tabi isomọ wọn, awọn ihamọ wọnyi lo:
    • awọn SELECT atokọ yẹ ki o ni iyatọ akojọpọ ti o le jẹ a GROUPING_ID iṣẹ lori gbogbo GROUP BY ikosile tabi GROUPING awọn iṣẹ kan fun kọọkan GROUP BY ikosile. Fun apẹẹrẹ, ti o ba GROUP BY gbolohun ọrọ wiwo ohun elo jẹ "GROUP BY CUBE(a, b)", lẹhinna SELECT akojọ yẹ ki o ni boya"GROUPING_ID(a, b)» tabi «GROUPING(a) AND GROUPING(b)»fun wiwo ohun elo lati jẹ isọdọtun yara.
    • GROUP BY ko yẹ ki o ja si ni eyikeyi pidánpidán groupings. Fun apere, "GROUP BY a, ROLLUP(a, b)"Kii ṣe isọdọtun ni iyara nitori pe o ja si awọn akojọpọ ẹda”(a), (a, b), AND (a)".

5.3.8.7 Awọn ihamọ lori isọdọtun Yara lori Awọn iwo Ohun elo pẹlu UNION GBOGBO

Materialized wiwo pẹlu awọn UNION ALL ṣeto onišẹ atilẹyin awọn REFRESH FAST aṣayan ti awọn ipo wọnyi ba ni itẹlọrun:

  • Ibeere asọye gbọdọ ni UNION ALL onišẹ ni oke ipele.

    awọn UNION ALL oniṣẹ ko le wa ni ifibọ inu a subquery, pẹlu ọkan sile: Awọn UNION ALL le jẹ ni a subquery ninu awọn FROM gbolohun ọrọ pese ibeere asọye jẹ ti fọọmu naa SELECT * FROM (wo tabi abẹlẹ pẹlu UNION ALL) bi ninu apẹẹrẹ atẹle:

    CREATE VIEW view_with_unionall AS (Yan c.rowid crid, c.cust_id, 2 umarker LATI awọn onibara c WHERE c.cust_last_name = 'Smith' UNION ALL SELECT c.rowid crid, c.cust_id, 3 umarker LATI awọn onibara c = Nibo c.cust_last_name 'Jones'); ṢẸDA Iwoye ohun elo unionall_inside_view_mv TUTU FAST ON IBEERE BI YAN * LATI wiwo_with_unionall;
    

    Ṣe akiyesi pe wiwo naa view_with_unionall satisfies awọn ibeere fun sare Sọ.

  • Kọọkan ibeere Àkọsílẹ ninu awọn UNION ALL Ibeere gbọdọ ni itẹlọrun awọn ibeere ti wiwo ohun elo ti o ni isọdọtun iyara pẹlu awọn akojọpọ tabi wiwo ohun elo ti o ni isọdọtun iyara pẹlu awọn akojọpọ.

    Awọn yẹ materialized view àkọọlẹ gbọdọ wa ni da lori awọn tabili bi beere fun awọn ti o baamu iru ti sare refreshable materialized view.
    Ṣe akiyesi pe aaye data Oracle tun ngbanilaaye ọran pataki ti wiwo tabili kan ti ohun elo pẹlu awọn akojọpọ ti a pese nikan ROWID ọwọn ti a ti wa ninu awọn SELECT akojọ ati ninu awọn materialized view log. Eyi han ninu ibeere asọye ti iwo naa view_with_unionall.

  • awọn SELECT akojọ ibeere kọọkan gbọdọ ni a UNION ALL asami, ati awọn UNION ALL iwe gbọdọ ni nọmba ibakan pato tabi iye okun ni ọkọọkan UNION ALL ẹka. Siwaju sii, ọwọn asami gbọdọ han ni ipo ordinal kanna ni SELECT akojọ ti kọọkan ìbéèrè Àkọsílẹ. Wo"UNION GBOGBO Alami ati Ibeere Tunkọ»Fun alaye diẹ sii nipa UNION ALL awọn asami.
  • Diẹ ninu awọn ẹya bii awọn akojọpọ ita, awọn ibeere wiwo ohun elo ti a fi sii nikan ati awọn tabili latọna jijin ko ni atilẹyin fun awọn iwo ohun elo pẹlu UNION ALL. Ṣakiyesi, sibẹsibẹ, pe awọn iwo ohun elo ti a lo ninu ẹda, eyiti ko ni awọn akojọpọ tabi awọn akojọpọ ninu, le ni isunmi ni iyara nigbati UNION ALL tabi awọn tabili latọna jijin lo.
  • Paramita ibẹrẹ ibaramu gbọdọ wa ni ṣeto si 9.2.0 tabi ju bẹẹ lọ lati ṣẹda wiwo ohun elo isọdọtun yiyara pẹlu UNION ALL.

Emi ko fẹ lati binu si awọn onijakidijagan Oracle, ṣugbọn idajọ nipasẹ atokọ awọn ihamọ wọn, o dabi pe a ko kọ ilana yii kii ṣe ni ọran gbogbogbo, lilo iru awoṣe kan, ṣugbọn nipasẹ ẹgbẹẹgbẹrun awọn ara ilu India, nibiti a ti fun gbogbo eniyan ni aye lati Kọ ẹ̀ka tirẹ̀, olukuluku wọn sì ṣe ohun tí ó lè ṣe. Lilo ọna ẹrọ yii fun ọgbọn-ọrọ gidi dabi ririn larin aaye mi. O le gba ohun alumọni kan nigbakugba nipa lilu ọkan ninu awọn ihamọ ti kii ṣe kedere. Bii o ṣe n ṣiṣẹ tun jẹ ibeere ti o yatọ, ṣugbọn o kọja ipari ti nkan yii.

Microsoft SQL Server

Awọn afikun Awọn ibeere

Ni afikun si awọn aṣayan SET ati awọn ibeere iṣẹ ṣiṣe ipinnu, awọn ibeere wọnyi gbọdọ pade:

  • Olumulo ti o ṣiṣẹ CREATE INDEX gbọdọ jẹ eni ti wiwo.
  • Nigbati o ba ṣẹda atọka, awọn IGNORE_DUP_KEY aṣayan gbọdọ wa ni ṣeto si PA (eto aiyipada).
  • Awọn tabili gbọdọ jẹ itọkasi nipasẹ awọn orukọ apakan meji, aṣiṣe.tablename ni wiwo definition.
  • Awọn iṣẹ asọye olumulo ti tọka si ni wiwo gbọdọ ṣẹda nipasẹ lilo awọn WITH SCHEMABINDING aṣayan.
  • Eyikeyi awọn iṣẹ asọye olumulo ti itọkasi ni wiwo gbọdọ jẹ itọkasi nipasẹ awọn orukọ apakan meji, ..
  • Ohun-ini wiwọle data ti iṣẹ asọye olumulo gbọdọ jẹ NO SQL, ati ita wiwọle ohun ini gbọdọ jẹ NO.
  • Awọn iṣẹ asiko asiko ede ti o wọpọ (CLR) le han ninu atokọ yiyan ti wiwo, ṣugbọn ko le jẹ apakan itumọ ti bọtini atọka akojọpọ. Awọn iṣẹ CLR ko le han ni gbolohun NIBI ti wiwo tabi ON ti iṣẹ JOIN ni wiwo.
  • Awọn iṣẹ CLR ati awọn ọna ti awọn iru asọye olumulo CLR ti a lo ninu asọye wiwo gbọdọ ni awọn ohun-ini ti a ṣeto bi o ṣe han ninu tabili atẹle.

    ohun ini
    akọsilẹ

    DETERMINISTIC = ODODO
    Gbọdọ jẹ ikede ni gbangba bi abuda ti Microsoft .NET Framework ọna.

    PẸNẸ = TÒÓTỌ
    Gbọdọ jẹ ikede ni gbangba bi abuda ti ọna .NET Framework.

    DATA ACCESS = KO SQL
    Ti pinnu nipa tito abuda DataAccess si DataAccessKind.None ati SystemDataAccess abuda si SystemDataAccessKind.Kò.

    ODE WAYE = RARA
    Ohun-ini yii jẹ aṣiṣe si NO fun awọn iṣe iṣe CLR.

  • Awọn wiwo gbọdọ wa ni da nipa lilo awọn WITH SCHEMABINDING aṣayan.
  • Wiwo naa gbọdọ tọka awọn tabili ipilẹ nikan ti o wa ni ibi ipamọ data kanna bi wiwo naa. Wiwo naa ko le tọka si awọn iwo miiran.
  • Gbólóhùn SELECT ninu asọye wiwo ko gbọdọ ni awọn eroja Transact-SQL wọnyi ninu:

    COUNT
    Awọn iṣẹ ROWSETOPENDATASOURCE, OPENQUERY, OPENROWSET, ATI OPENXML)
    OUTER darapọ (LEFT, RIGHT, tabi FULL)

    Tabili ti ari (ti a ṣalaye nipasẹ sisọ a SELECT alaye ninu FROM gbolohun ọrọ)
    Ara-darapọ
    Pato awọn ọwọn nipa lilo SELECT * or SELECT <table_name>.*

    DISTINCT
    STDEV, STDEVP, VAR, VARP, tabi AVG
    Ọrọ tabili ti o wọpọ (CTE)

    leefofo1, ọrọ, ọrọ ọrọ, image, XML, tabi ṣiṣan faili ọwọn
    Ibeere
    OVER gbolohun ọrọ, eyiti o pẹlu ipo tabi awọn iṣẹ window apapọ

    Awọn asọtẹlẹ kikun-ọrọ (CONTAINS, FREETEXT)
    SUM iṣẹ ti o tọkasi a nullable ikosile
    ORDER BY

    CLR olumulo-telẹ iṣẹ apapọ
    TOP
    CUBE, ROLLUP, tabi GROUPING SETS awọn oniṣẹ

    MIN, MAX
    UNION, EXCEPT, tabi INTERSECT awọn oniṣẹ
    TABLESAMPLE

    Table oniyipada
    OUTER APPLY or CROSS APPLY
    PIVOT, UNPIVOT

    fọnka ọwọn tosaaju
    Inline (TVF) tabi awọn iṣẹ ti o niyele lori tabili alaye-pupọ (MSTVF)
    OFFSET

    CHECKSUM_AGG

    1 Wiwo itọka le ni ninu leefofo awọn ọwọn; sibẹsibẹ, iru awọn ọwọn ko le wa ninu awọn iṣupọ atọka bọtini.

  • If GROUP BY wa bayi, asọye VIEW gbọdọ ni ninu COUNT_BIG(*) ati pe ko gbọdọ ni ninu HAVING. Awọn wọnyi ni GROUP BY awọn ihamọ wulo nikan si asọye wiwo atọka. Ibeere le lo wiwo atọka ninu ero ipaniyan rẹ paapaa ti ko ba ni itẹlọrun iwọnyi GROUP BY awọn ihamọ.
  • Ti asọye wiwo ni ninu GROUP BY gbolohun ọrọ, bọtini ti awọn oto iṣupọ atọka le tọka si nikan awọn ọwọn pato ninu awọn GROUP BY ipinnu.

O han gbangba nibi pe awọn ara ilu India ko ni ipa, nitori wọn pinnu lati ṣe ni ibamu si ero naa “a yoo ṣe diẹ, ṣugbọn daradara.” Iyẹn ni, wọn ni awọn maini diẹ sii lori aaye, ṣugbọn ipo wọn jẹ afihan diẹ sii. Ohun ti o ni ibanujẹ julọ ni aropin yii:

Wiwo naa gbọdọ tọka awọn tabili ipilẹ nikan ti o wa ni ibi ipamọ data kanna bi wiwo naa. Wiwo naa ko le tọka si awọn iwo miiran.

Ninu awọn ọrọ-ọrọ wa, eyi tumọ si pe iṣẹ kan ko le wọle si iṣẹ ohun elo miiran. Eleyi ge mọlẹ gbogbo alagbaro ni egbọn.
Paapaa, aropin yii (ati siwaju ninu ọrọ) dinku awọn ọran lilo pupọ:

Gbólóhùn SELECT ninu asọye wiwo ko gbọdọ ni awọn eroja Transact-SQL wọnyi ninu:

COUNT
Awọn iṣẹ ROWSETOPENDATASOURCE, OPENQUERY, OPENROWSET, ATI OPENXML)
OUTER darapọ (LEFT, RIGHT, tabi FULL)

Tabili ti ari (ti a ṣalaye nipasẹ sisọ a SELECT alaye ninu FROM gbolohun ọrọ)
Ara-darapọ
Pato awọn ọwọn nipa lilo SELECT * or SELECT <table_name>.*

DISTINCT
STDEV, STDEVP, VAR, VARP, tabi AVG
Ọrọ tabili ti o wọpọ (CTE)

leefofo1, ọrọ, ọrọ ọrọ, image, XML, tabi ṣiṣan faili ọwọn
Ibeere
OVER gbolohun ọrọ, eyiti o pẹlu ipo tabi awọn iṣẹ window apapọ

Awọn asọtẹlẹ kikun-ọrọ (CONTAINS, FREETEXT)
SUM iṣẹ ti o tọkasi a nullable ikosile
ORDER BY

CLR olumulo-telẹ iṣẹ apapọ
TOP
CUBE, ROLLUP, tabi GROUPING SETS awọn oniṣẹ

MIN, MAX
UNION, EXCEPT, tabi INTERSECT awọn oniṣẹ
TABLESAMPLE

Table oniyipada
OUTER APPLY or CROSS APPLY
PIVOT, UNPIVOT

fọnka ọwọn tosaaju
Inline (TVF) tabi awọn iṣẹ ti o niyele lori tabili alaye-pupọ (MSTVF)
OFFSET

CHECKSUM_AGG

ODE JOINS, UNION, PASE BY ati awọn miran ti wa ni idinamọ. O le ti rọrun lati pato ohun ti o le ṣee lo ju ohun ti a ko le lo. O ṣee ṣe ki atokọ naa kuru pupọ.

Lati ṣe akopọ: eto nla ti awọn ihamọ ni gbogbo (jẹ ki a ṣakiyesi iṣowo) DBMS vs ko si (ayafi ti ọgbọn kan, kii ṣe imọ-ẹrọ) ni imọ-ẹrọ LGPL. Bibẹẹkọ, o yẹ ki o ṣe akiyesi pe imuse ẹrọ yii ni ọgbọn ibatan jẹ diẹ nira diẹ sii ju ninu ọgbọn iṣẹ ṣiṣe ti a ṣalaye.

Imuse

Bawo ni o ṣe n ṣiṣẹ? PostgreSQL jẹ lilo bi “ẹrọ foju”. algorithm eka kan wa ninu ti o kọ awọn ibeere. Nibi orisun. Ki o si nibẹ ni ko o kan kan ti o tobi ṣeto ti heuristics pẹlu kan ìdìpọ ifs. Nitorinaa, ti o ba ni oṣu meji lati kawe, o le gbiyanju lati loye faaji.

Ṣe o ṣiṣẹ daradara bi? Munadoko gan. Laanu, eyi nira lati jẹrisi. Mo le sọ nikan pe ti o ba ṣe akiyesi awọn ẹgbẹẹgbẹrun awọn ibeere ti o wa ninu awọn ohun elo nla, lẹhinna ni apapọ wọn jẹ daradara siwaju sii ju awọn ti o dara julọ ti o dara. Oluṣeto SQL ti o dara julọ le kọ ibeere eyikeyi daradara siwaju sii, ṣugbọn pẹlu awọn ibeere ẹgbẹrun kan kii yoo ni iwuri tabi akoko lati ṣe. Ohun kan ṣoṣo ti Mo le tọka si bayi bi ẹri ti imunadoko ni pe ọpọlọpọ awọn iṣẹ akanṣe n ṣiṣẹ lori pẹpẹ ti a ṣe lori DBMS yii Awọn ọna ṣiṣe ERP, eyiti o ni ẹgbẹẹgbẹrun awọn iṣẹ MATERIALIZED oriṣiriṣi, pẹlu ẹgbẹẹgbẹrun awọn olumulo ati awọn apoti isura data terabyte pẹlu awọn ọgọọgọrun awọn miliọnu awọn igbasilẹ ti nṣiṣẹ lori olupin isise-meji deede. Sibẹsibẹ, ẹnikẹni le ṣayẹwo / tako imunadoko nipasẹ gbigba lati ayelujara Syeed ati PostgreSQL, titan wíwọlé awọn ibeere SQL ati igbiyanju lati yi ọgbọn ati data pada nibẹ.

Ninu awọn nkan atẹle, Emi yoo tun sọrọ nipa bii o ṣe le ṣeto awọn ihamọ lori awọn iṣẹ, ṣiṣẹ pẹlu awọn akoko iyipada, ati pupọ diẹ sii.

orisun: www.habr.com

Fi ọrọìwòye kun