Seachain úsáid a bhaint as OffSET and LIMIT i bhfiosrúcháin uimhrithe

Tá na laethanta imithe nuair nach raibh ort a bheith buartha faoi fheidhmíocht bunachar sonraí a bharrfheabhsú. Ní sheasann an t-am go fóill. Is mian le gach fiontraí teicneolaíochta nua an chéad Facebook eile a chruthú, agus iad ag iarraidh na sonraí go léir a bhailiú ar féidir leo a lámha a fháil. Tá na sonraí seo ag teastáil ó ghnólachtaí chun samhlacha a oiliúint níos fearr a chabhraíonn leo airgead a dhéanamh. I gcoinníollacha den sórt sin, ní mór do ríomhchláraitheoirí APIanna a chruthú a ligeann dóibh oibriú go tapa agus go hiontaofa le méideanna ollmhóra faisnéise.

Seachain úsáid a bhaint as OffSET and LIMIT i bhfiosrúcháin uimhrithe

Má bhí tú ag dearadh uirlisí nó bunachair shonraí le tamall ar bith, is dócha gur scríobh tú cód chun ceisteanna uimhrithe a rith. Mar shampla, mar seo:

SELECT * FROM table_name LIMIT 10 OFFSET 40

Cén chaoi a bhfuil sé?

Ach más mar seo a rinne tú do chuid leathanach, is oth liom a rá nach ndearna tú é ar an mbealach is éifeachtaí.

Ar mhaith leat agóid a dhéanamh liom? Is féidir leat aon chaitheamh am. Dríodair, Shopify и Meascra Tá siad ag baint úsáide as na teicníochtaí ar mhaith liom labhairt faoi inniu cheana féin.

Ainmnigh forbróir inneall amháin ar a laghad nár úsáid riamh OFFSET и LIMIT chun fiosruithe leathanach a dhéanamh. I MVP (Íostáirge Inmharthana) agus i dtionscadail ina n-úsáidtear méideanna beaga sonraí, tá an cur chuige seo infheidhme go leor. Tá sé “ach oibríonn,” mar a déarfá.

Ach más gá duit córais iontaofa agus éifeachtacha a chruthú ón tús, ba cheart duit a bheith cúramach roimh ré maidir le héifeachtúlacht na mbunachair shonraí a úsáidtear i gcórais den sórt sin a cheistiú.

Sa lá atá inniu beimid ag caint faoi na fadhbanna a bhaineann le feidhmiú go coitianta (ró-olc) na n-inneall fiosrúcháin leathanach, agus conas ardfheidhmíocht a bhaint amach agus fiosrúcháin den sórt sin á ndéanamh.

Cad atá cearr le Fritháireamh agus Teorainn?

Mar a dúradh cheana, OFFSET и LIMIT Feidhmíonn siad go maith i dtionscadail nach gá oibriú le méideanna móra sonraí.

Éiríonn an fhadhb nuair a fhásann an bunachar sonraí chomh mór sin nach n-oireann sé a thuilleadh i gcuimhne an fhreastalaí. Mar sin féin, agus tú ag obair leis an mbunachar sonraí seo, ní mór duit ceisteanna leathanach a úsáid.

Le go dtiocfaidh an fhadhb seo chun solais, ní mór cás a bheith ann ina dtéann an DBMS i muinín oibríocht Scanadh Tábla Iomlán neamhéifeachtach ar gach ceist uimhrithe (cé go bhféadfadh oibríochtaí ionsáite agus scriosta tarlú , agus níl sonraí as dáta ag teastáil uainn!).

Cad is “scanadh tábla iomláin” (nó “scanadh tábla seicheamhach”, Scan Seicheamhach) ann? Is oibríocht í seo ina léann an DBMS gach sraith den tábla go seicheamhach, is é sin, na sonraí atá ann, agus seiceálann sé iad le comhlíonadh coinníoll áirithe. Is eol gurb é an cineál scanadh tábla seo an ceann is moille. Is é fírinne an scéil, nuair a dhéantar é, go ndéantar go leor oibríochtaí ionchuir/aschuir a bhaineann le fochóras diosca an fhreastalaí. Déantar an scéal níos measa mar gheall ar an bhfoighne a bhaineann le bheith ag obair le sonraí atá stóráilte ar dhioscaí, agus toisc gur oibríocht dhian ar acmhainní é sonraí a aistriú ó dhiosca go cuimhne.

Mar shampla, tá taifid de 100000000 úsáideoir agat agus ritheann tú ceist leis an tógáil OFFSET 50000000. Ciallaíonn sé seo go mbeidh ar an DBMS na taifid seo go léir a lódáil (agus níl siad de dhíth orainn fiú!), iad a chur i gcuimhne, agus tar éis é sin a ghlacadh, abair, tuairiscítear 20 toradh i LIMIT.

Ligean le rá go bhféadfadh sé breathnú mar seo: "roghnaigh sraitheanna ó 50000 go 50020 ó 100000". Is é sin, beidh ar an gcóras 50000 sraith a luchtú ar dtús chun an cheist a chríochnú. An bhfeiceann tú an méid oibre gan ghá a bheidh le déanamh aici?

Mura gcreideann tú mé, féach ar an sampla a chruthaigh mé ag baint úsáide as na gnéithe db-fiddle.com

Seachain úsáid a bhaint as OffSET and LIMIT i bhfiosrúcháin uimhrithe
Sampla ag db-fiddle.com

Tá, ar chlé, sa pháirc Schema SQL, tá cód ann a chuireann 100000 sraith isteach sa bhunachar sonraí, agus ar dheis, sa réimse Query SQL, taispeántar dhá cheist. Breathnaíonn an chéad cheann, mall, mar seo:

SELECT *
FROM `docs`
LIMIT 10 OFFSET 85000;

Agus tá an dara ceann, atá ina réiteach éifeachtach ar an bhfadhb chéanna, mar seo:

SELECT *
FROM `docs`
WHERE id > 85000
LIMIT 10;

Chun na hiarratais seo a chomhlíonadh, níl le déanamh ach cliceáil ar an gcnaipe Run ag barr an leathanaigh. Tar éis é seo a dhéanamh, déanaimid comparáid idir faisnéis faoi am cur i gcrích na gceisteanna. Tharlaíonn sé go dtógann sé 30 uair níos faide ar a laghad chun fiosrúchán neamhéifeachtúil a dhéanamh ná an dara ceann a dhéanamh (athraíonn an t-am seo ó rith go rith; mar shampla, d'fhéadfadh an córas a thuairisciú gur thóg sé 37 ms an chéad cheist le cur i gcrích, ach rinneadh an dara - 1 ms).

Agus má tá níos mó sonraí ann, ansin beidh gach rud ag breathnú níos measa fós (chun a bheith cinnte de seo, féach ar mo chuid mar shampla le 10 milliún sraitheanna).

Ba cheart go dtabharfadh an méid atá pléite againn díreach roinnt léargas duit ar an gcaoi a bpróiseáiltear fiosruithe bunachar sonraí.

Tabhair faoi deara le do thoil dá airde an luach OFFSET — dá fhad a thógfaidh sé an t-iarratas a chur i gcrích.

Cad ba cheart dom a úsáid in ionad an teaglaim de FRITH-SET agus LIMIT?

In ionad teaglaim OFFSET и LIMIT Is fiú struchtúr a tógadh de réir na scéime seo a leanas a úsáid:

SELECT * FROM table_name WHERE id > 10 LIMIT 20

Is é seo forghníomhú fiosrúcháin le huimhrigh cúrsóir-bhunaithe.

In ionad na cinn reatha a stóráil go háitiúil OFFSET и LIMIT agus iad a tharchur le gach iarratas, ní mór duit a stóráil an eochair bunscoile deiridh a fuarthas (de ghnáth is é seo ID) Agus LIMIT, mar thoradh air sin, gheofar fiosruithe cosúil leis an méid thuas.

Cén fáth? Is é an pointe ná, trí aitheantóir na sraithe deiridh a léitear a shonrú go sainráite, go n-insíonn tú do DBMS cá háit a gcaithfidh sé tosú ag cuardach na sonraí riachtanacha. Ina theannta sin, déanfar an cuardach, a bhuí le húsáid na heochrach, go héifeachtach; ní gá go gcuirfeadh línte lasmuigh den raon sonraithe aird ar an gcóras.

Breathnaímis ar an gcomparáid feidhmíochta seo a leanas maidir le ceisteanna éagsúla. Seo ceist neamhéifeachtach.

Seachain úsáid a bhaint as OffSET and LIMIT i bhfiosrúcháin uimhrithe
Iarratas mall

Agus seo leagan optamaithe den iarratas seo.

Seachain úsáid a bhaint as OffSET and LIMIT i bhfiosrúcháin uimhrithe
Iarratas tapa

Tugann an dá cheist díreach an méid céanna sonraí ar ais. Ach tógann sé 12,80 soicind an chéad cheann a chríochnú, agus tógann an dara ceann 0,01 soicind. An mbraitheann tú an difríocht?

Fadhbanna féideartha

Le go n-oibreoidh an modh fiosraithe atá beartaithe go héifeachtach, ní mór colún (nó colúin) a bheith sa tábla ina bhfuil innéacsanna seicheamhacha uathúla, amhail aitheantóir slánuimhir. I gcásanna sonracha áirithe, d’fhéadfadh go gcinnfidh sé seo cé chomh rathúil is atá fiosrúcháin den sórt sin a úsáid chun luas oibre leis an mbunachar sonraí a mhéadú.

Ar ndóigh, agus fiosrúcháin á dtógáil, ní mór duit ailtireacht shonrach na dtáblaí a chur san áireamh agus na meicníochtaí sin a roghnú a oibreoidh is fearr ar na táblaí atá ann cheana féin. Mar shampla, más gá duit a bheith ag obair i bhfiosrúcháin le líon mór sonraí gaolmhara, b'fhéidir go mbeadh sé suimiúil duit seo alt.

Má táimid ag tabhairt aghaidhe ar an bhfadhb a bhaineann le heochair phríomhúil a bheith ar iarraidh, mar shampla, má tá tábla againn a bhfuil gaol idir go leor agus go leor againn, ansin is é an cur chuige traidisiúnta a bhaineann le húsáid OFFSET и LIMIT, ráthaithe a oireann dúinn. Ach d’fhéadfadh fiosrúcháin a d’fhéadfadh a bheith mall a bheith mar thoradh ar a úsáid. I gcásanna den sórt sin, ba mhaith liom a mholadh go n-úsáidfí eochair phríomhúil uath-mhéadaithe, fiú mura bhfuil gá leis ach chun ceisteanna uimhrithe a láimhseáil.

Má tá suim agat san ábhar seo - anseo, anseo и anseo - roinnt ábhar úsáideach.

Torthaí

Is é an príomhchonclúid is féidir linn a tharraingt ná, is cuma cén méid bunachair shonraí a bhfuilimid ag caint orthu, go bhfuil sé riachtanach i gcónaí anailís a dhéanamh ar luas feidhmithe na gceisteanna. Sa lá atá inniu ann, tá scalability réitigh thar a bheith tábhachtach, agus má tá gach rud deartha i gceart ón tús a bheith ag obair ar chóras áirithe, is féidir leis seo, sa todhchaí, an forbróir a shábháil ó go leor fadhbanna.

Conas a dhéanann tú fiosruithe bunachar sonraí a anailísiú agus a bharrfheabhsú?

Seachain úsáid a bhaint as OffSET and LIMIT i bhfiosrúcháin uimhrithe

Foinse: will.com

Add a comment