Ko te taurite te tuhi me te panui i roto i te papaa raraunga

Ko te taurite te tuhi me te panui i roto i te papaa raraunga
I mua Tuhinga I whakaahuatia e au te ariā me te whakatinanatanga o te putunga raraunga i hangaia i runga i nga mahi, kaua ki nga ripanga me nga mara penei i roto i nga paaunga paaunga. He maha nga tauira i homai e whakaatu ana i nga painga o tenei huarahi i runga i te tikanga puāwaitanga. He maha nga tangata i kite kaore i te tino whakapono.

I roto i tenei tuhinga, ka whakaatu ahau me pehea e taea ai e tenei ariā te tere me te ngawari ki te whakataurite i te tuhi me te panui ki te papaaarangi me te kore he whakarereketanga o te arorau whakahaere. Kua ngana te mahi rite ki te whakatinana i roto i nga DBMS arumoni hou (ina koa, Oracle me Microsoft SQL Server). I te mutunga o te tuhinga ka whakaatu ahau ko ta ratou i mahi, ki te ngawari, kaore i tino pai.

Whakaahuatanga

Ka rite ki o mua, mo te pai ake o te maarama ka tiimata ahau i te whakaahuatanga me nga tauira. Me kii me whakatinana tatou i te arorau ka whakahoki mai i te rarangi o nga tari me te maha o nga kaimahi kei roto me o raatau utu.

I roto i te patengi raraunga mahi ka penei te ahua:

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

Ko te uaua o te whakahaere i tenei patai ki tetahi DBMS ka rite ki O(te maha o nga kaimahi)na te mea ko tenei tatauranga me tirotiro i te tepu katoa o nga kaimahi ka whakarōpūhia ma te tari. He iti ano (e whakapono ana matou he maha ake nga kaimahi i nga tari) hei taapiri i runga i te mahere kua tohua O(te maha o nga kaimahi) ranei O(te maha o nga tari) mo te whakarōpū me etahi atu.

E marama ana tera pea he rereke te mahi i runga ake i nga DBMS rereke, engari kaore e rereke te uaua i tetahi huarahi.

I roto i te whakatinanatanga e whakaarohia ana, ka whakaputahia e te DBMS mahi tetahi uiuinga hei tatau i nga uara e hiahiatia ana mo te tari, katahi ka hono ki te ripanga tari kia whiwhi ai i te ingoa. Heoi, mo ia mahi, ina whakapuaki ana, ka taea te whakarite tohu MATERIALIZED motuhake. Ka hanga aunoa e te punaha he mara e rite ana mo ia mahi pera. Ina huri te uara o tetahi mahi, ka huri ano te uara o te mara i roto i te tauwhitinga kotahi. Ina uru atu ki tenei mahi, ka uru atu ki te mara i tatau-mua.

Ina koa, ki te tautuhi koe i te MATERIALIZED mo nga mahi tataunga Kaimahi и utuTama, ka rua nga mara ka taapirihia ki te tepu me te rarangi o nga tari, ka penapena te maha o nga kaimahi me o raatau utu katoa. I nga wa katoa ka rereke nga kaimahi, o raatau utu, hononga tari ranei, ka huri aunoa te punaha i nga uara o enei mara. Ko te patai o runga ka uru tika ki enei mara ka mahia ki roto O(te maha o nga tari).

He aha nga here? Kotahi noa te mea: ko taua mahi me whai i te maha o nga uara whakauru e tautuhia ai tona uara. Ki te kore, karekau e taea te hanga tepu hei pupuri i ona uara katoa, i te mea karekau he ripanga me te maha o nga rarangi haupae.

Hei tauira:

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

Kua tautuhia tenei mahi mo te tau mutunga kore o N (hei tauira, he pai te uara kino). No reira, kaore e taea e koe te whakauru MATERIALIZED ki runga. Na he herenga arorau tenei, ehara i te mea hangarau (ara, ehara i te mea kaore i taea e taatau te whakatinana). Ki te kore, karekau he here. Ka taea e koe te whakamahi whakarōpū, kōmaka, AND me OR, PARTITION, recursion, etc.

Hei tauira, i te rapanga 2.2 o te tuhinga o mua, ka taea e koe te whakauru MATERIALIZED ki nga mahi e rua:

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;

Ma te punaha ano e hanga tepu kotahi me nga momo taviri kiritaki, Hua и INTEGER, ka taapirihia nga mara e rua ki a ia ka whakahou i nga uara mara kei roto me nga huringa. Ina waea atu ki enei mahi, kaore e tatauhia, engari ka panuihia nga uara mai i nga mara e pa ana.

Ma te whakamahi i tenei tikanga, ka taea e koe, hei tauira, te whakakore i nga recursions (CTE) i roto i nga patai. Ina koa, whakaarohia nga roopu ka hanga rakau ma te whakamahi i te hononga o te tamaiti/matua (he hononga to ia roopu ki tona matua):

parent = DATA Group (Group);

I roto i te pātengi raraunga mahi, ka taea te tautuhi i te arorau recursion e whai ake nei:

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;

Mai mo te mahi heMatua kua tohua he MATERIALIZED, katahi ka hanga he ripanga me nga taviri e rua (rōpū) mo taua mea, kei reira te mara heMatua ka pono anake mena ko te taviri tuatahi he tamaiti o te tuarua. Ko te maha o nga whakaurunga o tenei ripanga ka rite ki te maha o nga roopu kua whakareatia ki te hohonutanga toharite o te rakau. Mena ka hiahia koe, hei tauira, ki te tatau i te maha o nga uri o tetahi roopu, ka taea e koe te whakamahi i tenei mahi:

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

Karekau he CTE i roto i te uiui SQL. Engari ka waiho he GROUP BY.

Ma te whakamahi i tenei tikanga, ka taea hoki e koe te whakarereke i te paataka raraunga mena e tika ana:

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

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

Ina karangahia he mahi mo te rarangi tono, ka panuihia te mara kei reira he taurangi mai i te ripanga me nga rarangi raupapa. Ina huri te ra ota, ma te punaha tonu e tatau te ra kua whakakorehia i roto i te raina.

Hua

He aha tenei tikanga katoa? I roto i nga DBMS matarohia, me te kore e tuhi ano i nga patai, ka taea e te kaiwhakawhanake, DBA anake te whakarereke i nga taurangi, te whakatau i nga tatauranga me te korero ki te kaiwhakatakoto uiui me pehea te mahi (a kei te waatea noa nga HINTs i nga DBMS arumoni). Ahakoa te kaha o ta raatau ngana, kaore e taea e raatau te whakaoti i te patai tuatahi i roto i te tuhinga i roto O (te maha o nga tari) me te kore e huri i nga patai me te taapiri i nga keu. I roto i te kaupapa e whakaarohia ana, i te waahanga whanaketanga kaore koe e whai whakaaro mo te hanganga rokiroki raraunga me nga kohinga hei whakamahi. Ka taea te whakarereke i enei mea katoa i runga i te rere, tika i te mahi.

I roto i te mahi he penei te ahua. Ko etahi o nga tangata e whakawhanake ana i te arorau i runga i nga mahi kei a koe. Kaore ratou e mohio ki nga algorithms me o raatau uaua, me nga mahere mahi, nga momo hono, me etahi atu waahanga hangarau. Ko enei taangata he nui ake nga kaitätari pakihi i nga kaihanga. Na, ka uru enei katoa ki te whakamatautau, ki te mahi ranei. Ka taea te takiuru o nga patai roa. Ina kitea he uiui roa, ka whakatau etahi atu tangata (he mea hangarau ake - DBA) ki te whakaahei i te MATERIALIZED i runga i etahi mahi takawaenga. He iti nei te puhoi o te rekoata (na te mea me whakahou ake he mara taapiri i roto i te tauwhitinga). Heoi, ehara i te mea ko tenei patai anake ka tino tere ake, engari ko era atu katoa e whakamahi ana i tenei mahi. I te wa ano, he ngawari te whakatau ko tehea mahi ka mahia. E rua nga tawhā matua: te maha o nga uara whakauru ka taea (koinei te maha o nga rekoata kei roto i te ripanga e pa ana), me te maha o nga wa e whakamahia ana i etahi atu mahi.

Analogues

He rite nga tikanga a nga DBMS arumoni o enei ra: MATERIALIZED VIEW with FAST REFRESH (Oracle) and INDEXED VIEW (Microsoft SQL Server). I roto i te PostgreSQL, kaore e taea te whakahou i te MATERIALIZED VIEW i roto i te tauwhitinga, engari i runga i te tono (me nga here tino kaha), no reira kare matou e whakaaro. Engari he maha o raatau raru e tino whakaiti ana i to raatau whakamahinga.

Tuatahi, ka taea e koe anake te whakaahei i te whakakikoruatanga mena kua hanga e koe he VIEW auau. Ki te kore, me tuhi ano koe i nga tono e toe ana kia uru atu ki te tirohanga katahi ano ka hangaia hei whakamahi i tenei hangahanga. Me waiho ranei nga mea katoa kia rite tonu, engari ka kore e whai hua mena he raraunga kua oti te tatau i mua, engari he maha nga patai kaore i te whakamahi i nga wa katoa, engari ka tatau ano.

Tuarua, he maha o raatau here:

Oracle

5.3.8.4 Nga Rahui Whanui mo te Whakahou Tere

Ko te patai tautuhi o te tirohanga kua whakaemihia e whai ake nei:

  • Ko te tirohanga whakakitenga me kaua e mau tohutoro ki nga korero tukurua kore penei SYSDATE a ROWNUM.
  • Ko te tirohanga whakakitenga me kaua e mau tohutoro ki RAW or LONG RAW momo raraunga.
  • Kaore e taea te whakauru a SELECT rarangi patai.
  • Kaore e taea te whakauru i nga mahi tātari (hei tauira, RANK) i roto i te SELECT rara.
  • Kaore e taea te tohutoro i tetahi ripanga kei runga he XMLIndex kua tautuhia te taupū.
  • Kaore e taea te whakauru a MODEL rara.
  • Kaore e taea te whakauru a HAVING rara me te patai.
  • Kaore e taea te whakauru i nga patai kohanga ANY, ALL, ranei NOT EXISTS.
  • Kaore e taea te whakauru a [START WITH …] CONNECT BY rara.
  • Kaore e taea te whakauru i nga ripanga taipitopito maha i nga waahi rereke.
  • ON COMMIT Kaore e taea e nga tirohanga hangai te whai ripanga taipitopito mamao.
  • Me whai hononga, whakahiato ranei nga tirohanga kua whakaemihia.
  • Ko nga tirohanga hono me nga tirohanga whakahiato me te a GROUP BY e kore e taea e rara te kowhiri mai i te ripanga kua whakaritea-taupu.

5.3.8.5 Nga Rahuitanga mo te Whakahou Tere mo nga Tirohanga Rawa me nga Hononga Anake

Ko te tautuhi i nga paatai ​​​​mo nga tirohanga whakakitenga me te hono anake kaore he whakahiatotanga e whai ake nei nga here mo te whakahou tere:

  • Nga here katoa mai i «Nga Rahui Whanui mo te Whakahou Tere".
  • Kaore e taea e raatau GROUP BY rara, whakahiato ranei.
  • Rowids o nga ripanga katoa i roto i te FROM me puta te rarangi i te SELECT rarangi o te patai.
  • Me noho tonu nga raarangi tirohanga me nga rowids mo nga ripanga turanga katoa o te FROM rarangi o te patai.
  • Kare e taea e koe te hanga i tetahi tirohanga tino tere ka taea te whakahou mai i nga ripanga maha me nga hononga ngawari kei roto he pou momo ahanoa i roto i te SELECT tauākī.

Ano hoki, ko te tikanga whakahou ka whiriwhiria e koe kare e tino pai mena:

  • Ko te uiui tautuhi ka whakamahi i te hono o waho e rite ana ki te hono o roto. Mena kei roto i te uiui tautuhi he hononga pera, whakaarohia te tuhi ano i te uiui tautuhi kia mau he hono o roto.
  • te SELECT Kei roto i te rarangi o te tirohanga hangai nga korero i runga i nga pou mai i nga ripanga maha.

5.3.8.6 Nga Rahui mo te Whakahou Tere i runga i nga Tirohanga Rawa me nga Huihuinga

Ko te tautuhi i nga uiuinga mo nga tirohanga whai kiko me nga whakahiato, hono ranei he here e whai ake nei mo te whakahou tere:

Ka tautokohia te whakahou tere mo nga mea e rua ON COMMIT a ON DEMAND Ko nga tirohanga kua puta, engari ka pa nga here e whai ake nei:

  • Ko nga ripanga katoa i roto i te tirohanga whakakitenga me whai i nga raarangi tirohanga, me nga raarangi tirohanga kua hangai me:
    • Kei roto nga pou katoa mai i te ripanga i tohutorohia i roto i te tirohanga hanga.
    • Tauwhāiti me ROWID a INCLUDING NEW VALUES.
    • Tautuhia te SEQUENCE rara mehemea e tika ana kia whakaurua te ripanga ki te whakaurunga/tikanga-uta, te muku, me te whakahou.

  • anake SUM, COUNT, AVG, STDDEV, VARIANCE, MIN a MAX e tautokona ana mo te whakahou tere.
  • COUNT(*) me tohu.
  • Ko nga mahi whakahiato me puta ko te waahanga o waho anake o te korero. Arā, ngā whakahiato pēnei i AVG(AVG(x)) or AVG(x)+ AVG(x) kaore e whakaaetia.
  • Mo ia whakahiato penei AVG(expr), nga mea e rite ana COUNT(expr) me noho tonu. E taunaki ana a Oracle SUM(expr) kia tohua.
  • If VARIANCE(expr) or STDDEV(expr) kua tohua, COUNT(expr) a SUM(expr) me tohu. E taunaki ana a Oracle SUM(expr *expr) kia tohua.
  • te SELECT Ko te tīwae i roto i te uiui tautuhi e kore e taea te korero uaua me nga pou mai i nga ripanga turanga maha. Ko te huarahi hei whakatika i tenei ko te whakamahi i te tirohanga hanga-hanga.
  • te SELECT me uru katoa te rarangi GROUP BY pou.
  • Ko te tirohanga whakakitenga kaore i te hangai i runga i te kotahi, neke atu ranei nga teepu mamao.
  • Mena ka whakamahi koe i te CHAR Momo raraunga kei roto i nga pou tātari o te raarangi tirohanga kua oti te hanga, me rite tonu nga huinga ahua o te pae matua me te tirohanga hanga.
  • Mena ko tetahi o nga mea e whai ake nei te tirohanga hanga, katahi ka tautokohia te whakahou tere i runga i nga whakaurunga DML tikanga me nga uta tika.
    • Tirohanga hangai me MIN or MAX whakahiato
    • Ko nga tirohanga tino kua SUM(expr) engari kaore COUNT(expr)
    • Ko nga tirohanga tino kore COUNT(*)

    Ko te ahua o taua tirohanga ka kiia ko te tirohanga whakauru-anake.

  • A materialized view with MAX or MIN he tere te whakahou i muri i te whakakore, te whakauru ranei i nga korero DML mena kaore he WHERE rara.
    Ko te max/min tere tāmata i muri i te muku, te whakauru DML ranei kaore i te rite te whanonga ki te keehi whakauru-anake. Ka whakakorehia, ka whakatauhia ano nga uara max/min mo nga roopu kua pa. Me mohio koe ki tana paanga mahi.
  • Ko nga tirohanga kua whakaingoatia me nga tirohanga kua whakaingoatia me nga paatai ​​​​i roto i te FROM Ka taea te whakahou i te rara mena ka taea te whakakotahi i nga tirohanga. Mo nga korero mo nga tirohanga ka hanumi, tirohia Oracle Database SQL Tohutoro Reo.
  • Mena karekau he hononga o waho, ka taea e koe te kowhiringa noa me te whakauru ki roto i te WHERE rara.
  • Ko nga tirohanga whakahiato me nga hononga o waho ka tere te whakahou i muri i te DML tikanga me nga kawenga tika, mena ko te teepu o waho anake i whakarereke. Ano, me noho nga here motuhake ki nga pou hono o te ripanga hono o roto. Mena he hononga o waho, me hono nga hononga katoa ma ANDs me whakamahi te taurite (=) kaiwhakahaere.
  • Mo nga tirohanga whai kiko me CUBE, ROLLUP, te whakarōpū huinga, te whakakotahitanga ranei, ka pa nga here e whai ake nei:
    • te SELECT kei roto i te rarangi he whakawehewehe whakarōpūtanga he a GROUPING_ID mahi i runga i te katoa GROUP BY whakaaturanga ranei GROUPING mahi kotahi mo ia GROUP BY whakapuakitanga. Hei tauira, mena ko te GROUP BY Ko te whiti o te tirohanga whakakitenga ko "GROUP BY CUBE(a, b)", katahi ka SELECT kei roto i te rarangi "GROUPING_ID(a, b)»ranei «GROUPING(a) AND GROUPING(b)» kia tere te whakahou i te tirohanga hanga.
    • GROUP BY kia kaua e hua he whakarōpūtanga takirua. Hei tauira, "GROUP BY a, ROLLUP(a, b)"Kare e tere te whakahou na te mea ka puta he whakarōpūtanga takirua "(a), (a, b), AND (a)".

5.3.8.7 Nga Rahui mo te Whakahou Tere mo nga Tirohanga Rawa me UNION KATOA

Ko nga tirohanga kua tino kitea me te UNION ALL tautoko te kaiwhakahaere i te REFRESH FAST kōwhiringa mēnā ka tutuki ngā tikanga e whai ake nei:

  • Ko te uiui tautuhi me whai te UNION ALL kaiwhakahaere i te taumata o runga.

    te UNION ALL e kore e taea te whakauru i te kaiwhakahaere ki roto i tetahi patai, me te mea kotahi: Ko te UNION ALL ka taea i roto i te subquery i roto i te FROM rara e whakaratohia ana ko te ahua o te patai tautuhi SELECT * FROM (Tirohia, patai ranei me UNION ALL) penei i te tauira e whai ake nei:

    WAIHANGA VIEW view_with_unionall AS (KŌWHIRINGA c.rowid crid, c.cust_id, 2 tangata mai i nga kaihoko c WHERE c.cust_last_name = 'Smith' UNION KATOA SELECT c.rowid crid, c.cust_id, 3 umarker FROM kiritaki c WHERE c.cust_last_name 'Jones'); WAIHANGA TE MATERIALIZED VIEW unionall_inside_view_mv REFRESH FAST ON DEMAND AS SELECT * FROM view_with_unionall;
    

    Kia mahara ko te tirohanga view_with_unionall ka tutuki nga whakaritenga mo te whakahou tere.

  • Ia paraka uiui kei roto i te UNION ALL Me tutuki te patai i nga whakaritenga o te tirohanga whakahiato tere me te whakahiato, te tirohanga whakahiato tere ranei me nga hononga.

    Me hanga nga rarangi tiro hanga e tika ana ki runga i nga teepu e hiahiatia ana mo te ahua o te ahua o te tirohanga whakangao tere.
    Kia mahara ko te Raraunga Raraunga Oracle ka taea ano te keehi motuhake o te tepu kotahi te tirohanga hanga me nga hononga ka whakaratohia anake te ROWID kua whakauruhia te pou ki roto i te SELECT rārangi me te i roto i te rangitaki tirohanga materialized. Ka whakaatuhia tenei i roto i te uiui tautuhi o te tirohanga view_with_unionall.

  • te SELECT Ko te rarangi o ia patai me whakauru a UNION ALL tohu, me te UNION ALL Me whai motuhake te tau, te uara aho ranei o ia pou UNION ALL manga. I tua atu, me puta te pou tohu ki te tuunga ordinal ano i roto i te SELECT rārangi o ia poraka uiui. Tirohia "UNION KATOA Tohu me te Tuhituhi Uiui»mo etahi atu korero mo UNION ALL tohu.
  • Ko etahi o nga ahuatanga penei i nga hononga o waho, te whakauru-anake i nga paatai ​​tiro whakahiato, me nga ripanga mamao kaore i te tautokohia mo nga tirohanga whai kiko. UNION ALL. Engari, kia mahara ko nga tirohanga whakakikorua e whakamahia ana i roto i te tukurua, karekau he hono, he whakahiato ranei, ka taea te whakahou tere ina UNION ALL ka whakamahia nga ripanga mamao ranei.
  • Me tautuhi te tawhā arawhiti hototahi ki te 9.2.0 teitei ake ranei hei hanga i tetahi tirohanga tere ka taea te whakahou me te UNION ALL.

Kaore au e pai ki te whakapataritari i nga kaiwhaiwhai Oracle, engari ma te whakatau i ta raatau rarangi here, te ahua nei kaore i tuhia tenei tikanga i roto i te keehi whanui, ma te whakamahi i etahi momo tauira, engari na nga mano tini o Inia, i whakawhiwhia nga tangata katoa ki te whai waahi. tuhia to ratou ake peka, a mahia ana e ia tangata nga mea e taea e ia. Ko te whakamahi i tenei tikanga mo te tino arorau he rite ki te haere i roto i te mara maina. Ka taea e koe te tiki maina i nga wa katoa ma te patu i tetahi o nga here kore-marama. Me pehea te mahi he patai motuhake ano, engari kei tua atu i te waahanga o tenei tuhinga.

Tūmau SQL Microsoft

Ētahi Atu Manaa

I tua atu i nga whiringa SET me nga whakaritenga mahi whakatau, me tutuki nga whakaritenga e whai ake nei:

  • Ko te kaiwhakamahi e mahi ana CREATE INDEX me te rangatira o te tirohanga.
  • Ka waihangahia e koe te taurangi, ko te IGNORE_DUP_KEY me tautuhi te kōwhiringa ki OFF (te tautuhinga taunoa).
  • Me tohutoro nga ripanga ma nga ingoa waahanga-rua, kaupapa.ingoa tepu i roto i te whakamaramatanga tirohanga.
  • Ko nga mahi kua tautuhia e te kaiwhakamahi kua tohua ki te tirohanga me hanga ma te whakamahi i te WITH SCHEMABINDING kōwhiringa.
  • Ko nga mahi kua tautuhia e te kaiwhakamahi e tohutorohia ana i te tirohanga me tohutoro ma nga ingoa waahanga e rua, ..
  • Me noho te taonga uru raraunga o tetahi mahi kua tautuhia e te kaiwhakamahi NO SQL, me te taonga uru waho me NO.
  • Ka puta mai nga taumahi reo whakahaere noa (CLR) ki te rarangi whiriwhiri o te tirohanga, engari kaore e taea te whakauru ki te whakamaramatanga o te taviri taupū kua rapoi. Kaore e taea e nga mahi CLR te puta ki te whiti WHERE o te tirohanga, ki te rarangi ON ranei o te mahi JOIN i te tirohanga.
  • Ko nga mahi a CLR me nga tikanga o nga momo tautuhi-kaiwhakamahi CLR e whakamahia ana i roto i te whakamaarama tirohanga me whakarite nga ahuatanga e whakaatuhia ana i te ripanga e whai ake nei.

    Āhuatanga
    tuhipoka

    WHAKAMAHI = TINO
    Me whakaatu marama hei huanga o te tikanga Microsoft .NET Framework.

    PRECISE = TINO
    Me whakaatu marama hei huanga o te tikanga .NET Framework.

    WHAKAMAHI RARAUNGA = KORE SQL
    Ka whakatauhia ma te tautuhi i te huanga DataAccess ki te DataAccessKind.None me te huanga SystemDataAccess ki te SystemDataAccessKind.None.

    TE URU KI WAHO = NO
    Ka taunoa tenei taonga ki te KORE mo nga mahinga CLR.

  • Me hanga te tirohanga ma te whakamahi i te WITH SCHEMABINDING kōwhiringa.
  • Me tohutoro te tirohanga ki nga ripanga turanga anake kei roto i te papaunga raraunga rite ki te tirohanga. Kaore e taea e te tirohanga te tohutoro ki etahi atu tirohanga.
  • Ko te tauākī SELECT i roto i te whakamāramatanga tirohanga me kaua e mau nga huānga Transact-SQL e whai ake nei:

    COUNT
    Nga mahi ROWSET (OPENDATASOURCE, OPENQUERY, OPENROWSET, ME OPENXML)
    OUTER hono (LEFT, RIGHT, ranei FULL)

    Ripanga takea (kua tautuhia ma te tohu a SELECT tauākī i roto i te FROM rara)
    Whai-hono
    Te tautuhi i nga pou ma te whakamahi SELECT * or SELECT <table_name>.*

    DISTINCT
    STDEV, STDEVP, VAR, VARP, ranei AVG
    Whakaaturanga ripanga noa (CTE)

    mānu1, kuputuhi, kuputuhi, image, XML, ranei rerenga kōnae tīwae
    Uiuitanga
    OVER rara, kei roto ko nga mahinga matapihi whakahiato ranei

    Tohunga kupu-katoa (CONTAINS, FREETEXT)
    SUM taumahi e tohutoro ana i te kupu korekore
    ORDER BY

    CLR mahi whakahiato kua tautuhia e te kaiwhakamahi
    TOP
    CUBE, ROLLUP, ranei GROUPING SETS ngā

    MIN, MAX
    UNION, EXCEPT, ranei INTERSECT ngā
    TABLESAMPLE

    Taurangi ripanga
    OUTER APPLY or CROSS APPLY
    PIVOT, UNPIVOT

    Ko nga huinga pou iti
    Rōraina (TVF) ranei tauākī-maha taumahi ripanga-wariu (MSTVF)
    OFFSET

    CHECKSUM_AGG

    1 Kei roto i te tirohanga taupū mānu poupou; heoi, kare e taea te whakauru i aua pou ki roto i te matua taupū kua rapoi.

  • If GROUP BY kei reira, me whakauru te whakamaramatanga VIEW COUNT_BIG(*) me kaua e mau HAVING. enei GROUP BY Ko nga here e pa ana ki te whakamaramatanga tirohanga kua taurangi. Ka taea e te uiui te whakamahi i te tirohanga taupū i roto i tana mahere mahi ahakoa karekau e tutuki GROUP BY here.
  • Mena kei roto i te whakamaramatanga tirohanga a GROUP BY rara, ka taea e te matua o te taupū tautau ahurei te tohutoro i nga pou kua tohua i roto i te GROUP BY rara.

E marama ana i konei kaore nga Inia i uru, i te mea kua whakatau ratou ki te mahi i runga i te kaupapa "ka mahi iti, engari ka pai." Arā, he nui ake ā rātou maina i runga i te mara, engari he mārama ake to ratou waahi. Ko te mea tino pouri ko tenei here:

Me tohutoro te tirohanga ki nga ripanga turanga anake kei roto i te papaunga raraunga rite ki te tirohanga. Kaore e taea e te tirohanga te tohutoro ki etahi atu tirohanga.

I roto i o maatau kupu, ko te tikanga tenei kaore e taea e tetahi mahi te uru atu ki tetahi atu mahi hanga. Ma tenei ka whakaheke i nga whakaaro katoa o te puku.
Ano, ko tenei here (me etahi atu i roto i te tuhinga) ka tino whakaiti i nga keehi whakamahi:

Ko te tauākī SELECT i roto i te whakamāramatanga tirohanga me kaua e mau nga huānga Transact-SQL e whai ake nei:

COUNT
Nga mahi ROWSET (OPENDATASOURCE, OPENQUERY, OPENROWSET, ME OPENXML)
OUTER hono (LEFT, RIGHT, ranei FULL)

Ripanga takea (kua tautuhia ma te tohu a SELECT tauākī i roto i te FROM rara)
Whai-hono
Te tautuhi i nga pou ma te whakamahi SELECT * or SELECT <table_name>.*

DISTINCT
STDEV, STDEVP, VAR, VARP, ranei AVG
Whakaaturanga ripanga noa (CTE)

mānu1, kuputuhi, kuputuhi, image, XML, ranei rerenga kōnae tīwae
Uiuitanga
OVER rara, kei roto ko nga mahinga matapihi whakahiato ranei

Tohunga kupu-katoa (CONTAINS, FREETEXT)
SUM taumahi e tohutoro ana i te kupu korekore
ORDER BY

CLR mahi whakahiato kua tautuhia e te kaiwhakamahi
TOP
CUBE, ROLLUP, ranei GROUPING SETS ngā

MIN, MAX
UNION, EXCEPT, ranei INTERSECT ngā
TABLESAMPLE

Taurangi ripanga
OUTER APPLY or CROSS APPLY
PIVOT, UNPIVOT

Ko nga huinga pou iti
Rōraina (TVF) ranei tauākī-maha taumahi ripanga-wariu (MSTVF)
OFFSET

CHECKSUM_AGG

Ko OUTER JOINS, UNION, ORDER BY me etahi atu ka rahuitia. He ngawari ake pea te tohu he aha te mea ka taea te whakamahi, kaua ko te mea kaore e taea te whakamahi. He iti ake pea te rarangi.

Hei whakarāpopoto: he huinga nui o nga here i roto i ia (me tuhi i te hokohoko) DBMS me te kore (haunga te kotahi arorau, ehara i te hangarau) i roto i te hangarau LGPL. Engari, me tohu ko te whakatinana i tenei tikanga i roto i te arorau whanaungatanga he ahua uaua ake i te arorau mahi kua whakaahuahia.

Реализация

Pehea te mahi? Ka whakamahia te PostgreSQL hei "miihini mariko". He algorithm matatini kei roto e hanga patai. I konei waehere punaha. A ehara i te mea he huinga nui noa o nga heuristics me te paihere o nga ifs. Na, mena he rua marama koe ki te ako, ka taea e koe te ngana ki te mohio ki te hoahoanga.

He pai te mahi? Tino whai hua. Engari, he uaua tenei ki te whakamatau. Ka taea e au anake te kii mena ka whakaarohia e koe nga mano o nga tono kei roto i nga tono nui, na te toharite he pai ake i nga mea o te kaiwhakawhanake pai. Ka taea e te kaitakataka SQL pai te tuhi i nga patai he pai ake, engari me te mano nga patai karekau ia e whai i te hihiri me te wa ki te mahi. Ko te mea anake ka taea e au te kii inaianei hei tohu mo te whai hua ko te maha o nga kaupapa kei te mahi i runga i te papahanga i hangaia i runga i tenei DBMS Nga punaha ERP, he mano tini nga momo mahi MATERIALIZED, me nga mano o nga kaiwhakamahi me nga papaapapa terabyte me nga rau miriona o nga rekoata e rere ana i runga i te tūmau e rua-tukatuka auau. Heoi, ka taea e te tangata te tirotiro/whakapae i te whai huatanga ma te tango tūāpapa me PostgreSQL, huri ana te takiuru i nga patai SQL me te ngana ki te huri i te arorau me nga raraunga ki reira.

I roto i nga tuhinga e whai ake nei, ka korero ano ahau me pehea e taea ai e koe te whakarite here mo nga mahi, te mahi me nga huringa huringa, me te maha atu.

Source: will.com

Tāpiri i te kōrero