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;
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 LONGRAW 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 NOTEXISTS.
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.
ONCOMMIT 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 GROUPBY 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:
Isọdọtun yara jẹ atilẹyin fun awọn mejeeji ONCOMMIT ati ONDEMAND 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 INCLUDINGNEWVALUES.
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 GROUPBY 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 GROUPBY ikosile tabi GROUPING awọn iṣẹ kan fun kọọkan GROUPBY ikosile. Fun apẹẹrẹ, ti o ba GROUPBY gbolohun ọrọ wiwo ohun elo jẹ "GROUPBYCUBE(a, b)", lẹhinna SELECT akojọ yẹ ki o ni boya"GROUPING_ID(a, b)» tabi «GROUPING(a)ANDGROUPING(b)»fun wiwo ohun elo lati jẹ isọdọtun yara.
GROUPBY 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 UNIONALL ṣeto onišẹ atilẹyin awọn REFRESHFAST aṣayan ti awọn ipo wọnyi ba ni itẹlọrun:
Ibeere asọye gbọdọ ni UNIONALL onišẹ ni oke ipele.
awọn UNIONALL oniṣẹ ko le wa ni ifibọ inu a subquery, pẹlu ọkan sile: Awọn UNIONALL 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 UNIONALL) 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 UNIONALL 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 UNIONALL asami, ati awọn UNIONALL iwe gbọdọ ni nọmba ibakan pato tabi iye okun ni ọkọọkan UNIONALL ẹ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 UNIONALL 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 UNIONALL. Ṣ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 UNIONALL 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 UNIONALL.
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 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.