He aha koe e hiahia ai ki te tautoko taputapu mo te whakaingoatanga o nga taviri?

Kia ora katoa! He kaiwhakawhanake tuara ahau e tuhi ana i nga ratonga moroiti ki Java + Spring. Kei te mahi ahau i tetahi o nga roopu whanaketanga hua o roto i Tinkoff.

He aha koe e hiahia ai ki te tautoko taputapu mo te whakaingoatanga o nga taviri?

I roto i ta maatau roopu, ka puta te patai mo te arotau i nga paatai ​​​​i roto i te DBMS. I nga wa katoa ka hiahia koe kia tere ake, engari kaore e taea e koe te mahi i nga wa katoa me nga tohu kua oti te hanga whakaaro-me rapu koe mo etahi huarahi mahi. I tetahi o enei kopikopiko huri noa i te paetukutuku ki te rapu arotautanga whaitake i te wa e mahi ana me nga papaa raraunga, i kitea e au Ko te rangitaki a Marcus Wynand he awhina mutunga kore, Kaituhi o SQL Performance Explained. Koinei te momo rangitaki onge ka taea e koe te panui i nga tuhinga katoa i te rarangi.

E hiahia ana ahau ki te whakamaori i tetahi tuhinga poto na Marcus mo koe. Ka taea te kii ki etahi waahanga he whakaaturanga e whai ana ki te kukume i te aro ki nga mea tawhito, engari he raruraru e tika ana mo te mahi o te mahi whakaheke i runga i te paerewa SQL.

I etahi waahi ka taapirihia e ahau te kaituhi me nga whakamarama me nga korero. Ka tohu ahau ki nga waahi katoa "approx." mo te whakamarama ake

Whakataki iti

Ki taku whakaaro he maha nga tangata e mohio ana he aha te raru me te puhoi o te mahi ki te kowhiri i te wharangi ma te offset. I mohio koe ka taea te whakakapi ki te hoahoa pai ake?

Na, ka kii te kupu matua whakaheke ki te paataka korero kia pekehia nga rekoata tuatahi i roto i te tono. Heoi ano, me panui tonu e te patengi raraunga enei n rekoata tuatahi mai i te kopae, i runga i te ota kua homai (tuhipoka: tono te tohatoha mena kua tohua), katahi ka taea te whakahoki rekoata mai i te n+1 ki mua. Ko te mea tino pai ko te raruraru kaore i roto i te whakatinanatanga motuhake i roto i te DBMS, engari i roto i te whakamaramatanga taketake e ai ki te paerewa:

…ka kōmaka tuatahitia ngā haupae kia rite ki te kātahi ka whakawhāitihia mā te whakataka i te maha o ngā haupae i whakapūtātia i roto i te mai i te timatanga…
-SQL:2016, Wāhanga 2, 4.15.3 Ngā ripanga i ahu mai (tohu: ko te paerewa tino whakamahia i tenei wa)

Ko te mea nui i konei ko te whakawhiwhinga he tawhā kotahi - ko te maha o nga rekoata hei peke, katahi ano. I muri i tenei whakamaramatanga, ka taea e te DBMS te tiki i nga rekoata katoa katahi ka whakakore i nga mea kore. Ko te tikanga, ko tenei whakamaramatanga o te whakawhiwhinga e akiaki ana i a maatau ki te mahi taapiri. A kaore he mea nui mena he SQL, he NoSQL ranei.

He iti noa atu te mamae

Ko nga raruraru ki te offset e kore e mutu i reira, a koinei te take. Mena, i waenga i te panui i nga wharangi e rua o nga raraunga mai i te kopae, ka whakauruhia e tetahi atu mahi he rekoata hou, ka ahatia tenei keehi?

He aha koe e hiahia ai ki te tautoko taputapu mo te whakaingoatanga o nga taviri?

I te wa e whakamahia ana te offset ki te peke i nga rekoata mai i nga wharangi o mua, mena ka taapirihia he rekoata hou i waenga i nga panui o nga wharangi rereke, tera pea ka whiwhi koe i nga taarua (tohu: ka taea tenei ina panui tatou i ia wharangi ma te whakamahi i te raupapa ma te hanga, katahi ka kei waenganui o ta maatau whakaputanga ka whiwhi urunga hou).

E whakaatu ana te ahua i tenei ahuatanga. Ka panuihia e te turanga nga rekoata tuatahi 10, muri iho ka whakauruhia he rekoata hou, ka whakakore i nga rekoata panui katoa ma te 1. Na ka tangohia e te turanga he wharangi hou mai i nga rekoata 10 e whai ake nei ka timata mai i te 11th, me te mea e tika ana, engari mai i te 10th, te taarua i tenei rekoata. Arā atu anō ngā hē e pā ana ki te whakamahinga o tēnei kīanga, engari koinei te mea tino noa.

Kua kitea e matou, ehara enei i te raruraru ki tetahi DBMS motuhake me o raatau whakatinanatanga. Ko te raruraru ko te tautuhi i te whakaingoatanga i runga i te paerewa SQL. Ka korero matou ki te DBMS ko tehea wharangi hei tiki, e hia nga rekoata hei peke. Kaore e taea e te paataka korero te arotau i taua tono, na te mea he iti rawa nga korero mo tenei.

He mea tika ano kia whakamaramahia ehara tenei i te raru ki tetahi kupu matua motuhake, engari ki nga tohu o te patai. He maha atu nga wetereo e rite ana ki o raatau ahuatanga raru:

  • Ko te kupu matua o te wehenga he rite ki te korero o mua.
  • Ko te hanga o nga kupu matua e rua tepe [offset] (ahakoa ehara i te mea tino kino te rohe).
  • Tātarihia mā ngā rohenga raro, i runga i te nama haupae (hei tauira, row_number(), rownum, etc.).

Ko enei korero katoa he korero noa ki a koe e hia nga rarangi ka pekehia, kaore he korero taapiri, he horopaki ranei.

I muri mai i roto i tenei tuhinga, ka whakamahia te kupu matua offset hei whakarāpopototanga o enei whiringa katoa.

Te ora kaore he OFFSET

Inaianei ka whakaaro tatou ka pehea to tatou ao ki te kore enei raruraru katoa. Te ahua nei ko te oranga kaore he taapiri he tino uaua: ma te kowhiri, ka taea e koe te kowhiri i nga rarangi kaore ano kia kitea e koe (tohu: ara, ko era kaore i te wharangi o mua), ma te whakamahi i tetahi ahuatanga kei hea.

I tenei keehi, ka tiimata mai i te meka ka mahia nga kowhiri i runga i te huinga kua whakaritea (he pai te ota tawhito na). I te mea he huinga kua ota taatau, ka taea e taatau te whakamahi i te tātari ngawari noa hei tiki i nga raraunga kei muri i te rekoata whakamutunga o te wharangi o mua:

    SELECT ...
    FROM ...
    WHERE ...
    AND id < ?last_seen_id
    ORDER BY id DESC
    FETCH FIRST 10 ROWS ONLY

Koira te kaupapa katoa o tenei huarahi. Ko te tikanga, ka nui ake te ngahau i te wa e tohatoha ana i nga pou maha, engari he rite tonu te whakaaro. He mea nui kia mohio ko tenei hoahoa e pa ana ki te tini NoSQL-whakatau.

Ko tenei huarahi e kiia ana ko te rapu tikanga, ko te wharangi wharangi matua ranei. Ka whakatauhia e ia te rapanga hua maanu (whakatupato: ko te ahuatanga o te tuhi i waenga i nga wharangi panui kua whakaahuatia i mua ake nei) me te tikanga, ko te mea e arohaina ana e tatou katoa, he tere ake te mahi me te pumau atu i te taapiri matarohia. Ko te pumau kei roto i te meka kaore e piki ake te wa tukatuka tono ki te maha o te ripanga i tonohia (note: ki te hiahia koe ki te ako atu mo nga mahi o nga huarahi rereke ki te whakarangirangi, ka taea e koe tirohia te whakaaturanga a te kaituhi. Ka kitea hoki e koe nga tohu whakataurite mo nga tikanga rereke kei reira).

Ko tetahi o nga kiriata e korero ana mo terako taua whakaingoatanga ma nga taviri, ko te tikanga, ehara i te mana katoa - kei a ia ona here. Ko te mea nui ko te kore ia e kaha ki te panui i nga wharangi matapōkere (note: inconsistent). Heoi, i te wa o te panuku mutunga kore (note: i te pito o mua), ehara tenei i te raru. Ko te whakatau i te tau wharangi mo te paato he whakatau kino i roto i te hoahoa UI (note: whakaaro o te kaituhi o te tuhinga).

He aha nga taputapu?

I te nuinga o nga wa karekau e tika te whakaingoatanga o nga taviri na te kore tautoko taputapu mo tenei tikanga. Ko te nuinga o nga taputapu whanaketanga, tae atu ki nga momo anga, kaore koe e whakaae ki te whiriwhiri me pehea te mahi whakarangirangi.

Ko te ahuatanga kei te kaha ake na te mea ko te tikanga kua whakaahuahia e hiahia ana ki te tautoko mutunga-ki-mutunga i roto i nga hangarau e whakamahia ana - mai i te DBMS ki te whakatinana i te tono AJAX i roto i te tirotiro me te panuku mutunga kore. Engari i te tauwhāiti noa i te tau wharangi, me tohu e koe he huinga taviri mo nga wharangi katoa i te wa kotahi.

Heoi, kei te piki haere te maha o nga anga e tautoko ana i te whakaingoatanga o nga taviri. Anei nga mea kei a tatou i tenei wa:

(Tuhipoka: i tangohia etahi hononga na te mea i te wa o te whakamaoritanga kaore ano etahi o nga whare pukapuka kia whakahoutia mai i te tau 2017-2018. Mena kei te pirangi koe, ka taea e koe te titiro ki te puna taketake.)

I tenei wa ka hiahiatia to awhina. Ki te hanga, ki te tautoko ranei koe i tetahi anga e whakamahi ana i te whakaingoatanga, ka patai atu ahau, ka tohe atu ahau ki a koe ki te tuku tautoko tangata whenua mo te whakaingoatanga i runga i nga taviri. Mena kei a koe nga patai, kei te hiahia awhina ranei koe, ka koa ahau ki te awhina (te huinga, Twitter, puka whakapā) (note: mai i taku wheako ki a Marcus, ka taea e au te kii he tino ngakau nui ia ki te hora i tenei kaupapa).

Mena ka whakamahi koe i nga otinga kua oti te hanga e whakaaro ana koe he pai ki te tautoko mo te whakaingoatanga ma nga taviri, hanga he tono, tuku ranei he otinga kua rite, mena ka taea. Ka taea hoki e koe te hono ki tenei tuhinga.

mutunga

Ko te take kaore i te whanuihia te huarahi ngawari me te whaihua penei i te whakaingoatanga ma nga taviri, ehara i te mea he uaua ki te whakatinana hangarau, me whakapau kaha ranei. Ko te take nui ko te nuinga kua waia ki te kite me te mahi me te offset - na te paerewa ake tenei huarahi i whakahau.

Ko te mutunga mai, he iti noa nga tangata e whakaaro ana ki te whakarereke i te huarahi ki te whakaingoatanga, na tenei, kei te pai haere te tautoko mai i nga anga me nga whare pukapuka. No reira, ki te tata ki a koe te whakaaro me te whainga o te whakaingoatanga-kore utu, awhina mai ki te horahia!

Source: https://use-the-index-luke.com/no-offset
Kaituhi: Markus Winand

Source: will.com

Tāpiri i te kōrero