Kua pahemo nga ra kaore koe i te awangawanga mo te arotau i nga mahinga papaa raraunga. E kore e tu te wa. Ko ia kaipakihi hangarau hou e hiahia ana ki te hanga i te Facebook e whai ake nei, i te wa e ngana ana ki te kohikohi i nga raraunga katoa ka taea e ratou te tiki. Kei te hiahia nga pakihi ki enei raraunga kia pai ake ai nga tauira whakangungu hei awhina i a raatau ki te whai moni. I roto i nga ahuatanga penei, me hanga e nga kaihōtaka nga API e taea ai e ratou te mahi tere me te pono me te nui o nga korero.
Mena kei te hoahoa koe i te tono, i nga papamuri raraunga mo te roanga o te wa, kua tuhia pea e koe he waehere hei whakahaere i nga patai kua tohua. Hei tauira, penei:
SELECT * FROM table_name LIMIT 10 OFFSET 40
Ko te huarahi?
Engari ki te penei to mahi i to whakaingoatanga, ka pouri ahau ki te kii kaore koe i mahi i te huarahi tino pai.
Kei te pirangi koe ki te whakahe ki ahau?
Whakaingoatia kia kotahi te kaiwhakawhanake tuara kaore ano kia whakamahia OFFSET
и LIMIT
ki te mahi i nga patai whakaingoatanga. I roto i te MVP (Minimum Viable Product) me nga kaupapa e whakamahia ana te iti o nga raraunga, ka tino tika tenei huarahi. He "mahi noa," hei korero.
Engari ki te hiahia koe ki te hanga i nga punaha pono me te whai hua mai i te tiimatanga, me tupato koe i mua mo te pai o te uiui i nga papaunga raraunga e whakamahia ana i roto i aua punaha.
I tenei ra ka korero tatou mo nga raru e whakamahia ana (he kino rawa) nga whakaurunga o nga miihini patai kua whakaingoatia, me pehea te whakatutuki i nga mahi teitei i te wa e mahia ana enei patai.
He aha te he o OFFSET me te LIMIT?
Ka rite ki kua mea, OFFSET
и LIMIT
He pai ta ratou mahi i roto i nga kaupapa kaore e tika kia mahi me te nui o nga raraunga.
Ka puta ake te raru ka tipu te papaa raraunga ki te rahi e kore e uru ki roto i te mahara o te tūmau. Heoi, i te wa e mahi ana koe me tenei paataka raraunga, me whakamahi koe i nga patai kua tohua.
Kia puta ake ai tenei raru, me whai waahi te DBMS ki tetahi mahi Matawai Ripanga Katoa i runga i ia patai kua whakaingoatia (i te wa ka puta nga mahi whakauru me te whakakore, a kaore e hiahiatia he raraunga tawhito!).
He aha te "matawai ripanga katoa" (he "matawai ripanga raupapa", Matawai Raupapa)? He mahinga tenei i te wa e panuihia ai e te DBMS ia rarangi o te ripanga, ara, nga raraunga kei roto, ka tirotirohia kia rite ki tetahi ahuatanga. Ko tenei momo karapa tepu e mohiotia ana ko te tino puhoi. Ko te meka ko te wa e mahia ana, he maha nga mahi whakauru/putanga ka mahia e uru ana ki te puunaha kopae a te tūmau. Ka kino ake te ahuatanga na te roanga e pa ana ki te mahi me nga raraunga kua rongoa i runga i nga kopae, me te mea ko te whakawhiti raraunga mai i te kōpae ki te mahara he mahi tino kaha.
Hei tauira, kei a koe nga rekoata o nga kaiwhakamahi 100000000 ka whakahaere koe i tetahi patai me te hanga OFFSET 50000000
. Ko te tikanga tenei me utaina e te DBMS enei rekoata katoa (kaore ano e hiahiatia e matou!), ka mau ki roto i te mahara, ka mutu, ka kii, 20 nga hua i ripoatahia LIMIT
.
Me kii penei pea te ahua: "twhiria nga rarangi mai i te 50000 ki te 50020 mai i te 100000". Arā, me utaina e te punaha te 50000 rarangi hei whakaoti i te patai. Kei te kite koe i te nui o nga mahi koretake ka mahia e ia?
Ki te kore koe e whakapono ki ahau, tirohia te tauira i hanga e au ma te whakamahi i nga ahuatanga
Tauira i db-fiddle.com
I reira, i te taha maui, i te mara Schema SQL
, he waehere hei whakauru i nga rarangi 100000 ki roto i te papanga raraunga, kei te taha matau, i te mara Query SQL
, e rua nga patai ka whakaatuhia. Ko te tuatahi, he puhoi, penei te ahua:
SELECT *
FROM `docs`
LIMIT 10 OFFSET 85000;
A ko te tuarua, he otinga whai hua mo te raru ano, penei:
SELECT *
FROM `docs`
WHERE id > 85000
LIMIT 10;
Hei whakatutuki i enei tono, paatohia te paatene Run
kei runga o te wharangi. Ka oti tenei, ka whakatairitehia e matou nga korero mo te wa mahi uiui. Te ahua nei he 30 nga wa te roa ake o te whakahaere i tetahi patai kore i te mahi tuarua (he rereke tenei waa mai i te oma ki te oma; hei tauira, ka kii pea te punaha ko te patai tuatahi i pau te 37 ms ki te whakaoti, engari ko te mahi o te tuarua - 1 ms).
A, ki te mea he nui ake nga raraunga, katahi ka ahua kino rawa atu nga mea katoa (kia whakaponohia tenei, tirohia taku
Ko nga mea kua korerohia ake nei me whakaatu ki a koe me pehea te tukatuka o nga paatai paparangi raraunga.
Kia mahara ko te teitei ake o te uara OFFSET
— ka roa ake te tono kia oti.
He aha me whakamahi hei utu mo te whakakotahitanga o OFFSET me te LIMIT?
Engari he huinga OFFSET
и LIMIT
He pai ki te whakamahi i te hanganga i hangaia i runga i te kaupapa e whai ake nei:
SELECT * FROM table_name WHERE id > 10 LIMIT 20
He mahi uiui tenei me te whakarangirangi i runga i te pehu.
Engari o te rokiroki o nāianei i te rohe OFFSET
и LIMIT
me te tuku ki ia tono, me penapena e koe te kii tuatahi kua riro (ko te tikanga tenei ID
) a LIMIT
, ko te mutunga, ka whiwhi nga patai e rite ana ki nga korero o runga ake nei.
He aha? Ko te mea nui ma te whakaatu i te tohu tohu o te rarangi whakamutunga i panuitia, ka korero koe ki to DBMS me timata ki te rapu i nga raraunga e tika ana. I tua atu, ko te rapu, he mihi ki te whakamahinga o te kii, ka mahi pai; kaore te punaha e raru i nga raina i waho o te awhe kua tohua.
Kia titiro tatou ki te whakataurite mahi e whai ake nei mo nga momo patai. Anei tetahi patai kore whai hua.
tono puhoi
Anei tetahi putanga papai o tenei tono.
Tono tere
He rite tonu te nui o nga raraunga ka whakahokia e nga patai e rua. Engari ko te mea tuatahi e 12,80 hēkona kia oti, ko te tuarua he 0,01 hēkona. Ka rongo koe i te rereketanga?
Nga raru pea
Kia pai ai te mahi o te tikanga patai, me whai tīwae (ranei tīwae) te ripanga kei roto i ngā taupū ahurei, raupapa raupapa, penei i te tauutuutu tauoti. I etahi wa motuhake, ka taea e tenei te whakatau i te angitu o te whakamahi i nga patai penei ki te whakanui ake i te tere o te mahi me te paataka raraunga.
Ko te tikanga, i te wa e hanga patai ana, me whai whakaaro koe ki te hoahoanga motuhake o nga teepu me te whiriwhiri i nga tikanga ka pai ake te mahi i runga i nga ripanga o naianei. Hei tauira, ki te hiahia koe ki te mahi i roto i nga paatai me nga pukapuka nui o nga raraunga e pa ana, ka kitea e koe he pai
Mena ka pa ki a tatou te raruraru o te ngaro o te matua matua, hei tauira, ki te mea he teepu me te hononga maha-ki-maha, na ko te huarahi tawhito o te whakamahi OFFSET
и LIMIT
, ka taurangi kia pai ki a maatau. Engari ko tana whakamahinga ka hua pea nga patai puhoi. I roto i enei ahuatanga, ka tūtohu ahau ki te whakamahi i te taviri matua whakanui-aunoa, ahakoa he mea tika ki te hapai i nga patai whakahiato.
Mena kei te pirangi koe ki tenei kaupapa -
Ngā putanga
Ko te whakatau matua ka taea e tatou te tuhi, ahakoa he aha te rahi o nga putunga korero e korero ana tatou, me tirotiro tonu te tere o te mahi patai. I enei wa, he mea tino nui te whakamaaramatanga o nga otinga, a ki te mea he mea hanga tika nga mea katoa mai i te tiimatanga o te mahi i runga i tetahi punaha, ka taea e tenei, i te wa kei te heke mai, te whakaora i te kaiwhakawhanake mai i nga raru maha.
Me pehea koe ki te wetewete me te arotau i nga paatai papaunga raraunga?
Source: will.com