Zere iji OFFSET na LIMIT n'ajụjụ ndị edebere

Emeela ụbọchị ị na-enweghị nchegbu maka ịkwalite arụmọrụ nchekwa data. Oge anaghị eguzo otu ebe. Onye ọchụnta ego ọhụụ ọ bụla chọrọ ịmepụta Facebook na-esote, ebe ha na-agbalị ịnakọta data niile ha nwere ike nweta aka. Azụmaahịa chọrọ data a ka ọ bụrụ ụdị ụgbọ oloko ka mma nke na-enyere ha aka ịkpata ego. N'ọnọdụ ndị dị otú ahụ, ndị mmemme kwesịrị ịmepụta API nke na-enye ha ohere ịrụ ọrụ ngwa ngwa na ntụkwasị obi na nnukwu ozi.

Zere iji OFFSET na LIMIT n'ajụjụ ndị edebere

Ọ bụrụ na ị na-emebe ngwa ma ọ bụ nchekwa data na-akwado ogologo oge ọ bụla, ikekwe ị dela koodu iji mee ajụjụ ndị nwere pagined. Dịka ọmụmaatụ, dịka nke a:

SELECT * FROM table_name LIMIT 10 OFFSET 40

Otú ọ dị?

Mana ọ bụrụ otu a ka i si mee pagination gị, ọ dị m nwute ịsị na i meghị ya n'ụzọ kacha mma.

Ị chọrọ ịjụ m? You nwere ike bụghị emefu время. slack, Shopify и Ngwakọta Ha na-eji usoro ndị m chọrọ ikwu maka taa.

Kpọọ opekata mpe otu onye nrụpụta azụ na-ejibeghị OFFSET и LIMIT ime ajuju ajuju. Na MVP (Ngwaahịa Opekempe) yana n'ọrụ ebe a na-eji obere data eme ihe, usoro a bara uru nke ukwuu. Ọ “na-arụ ọrụ,” dị ka a pụrụ isi kwuo ya.

Ma ọ bụrụ na ịchọrọ ịmepụta usoro a pụrụ ịdabere na ya na nke ọma site na ọkọchị, ị kwesịrị ịkpachara anya tupu oge eruo maka ịrụ ọrụ nke ịjụ ajụjụ ọdụ data eji na usoro ndị dị otú ahụ.

Taa, anyị ga-ekwu maka nsogbu ndị a na-ejikarị (dị njọ) mmejuputa nke engines ajụjụ paginated, yana otu esi enweta arụmọrụ dị elu mgbe ị na-eme ajụjụ ndị dị otú ahụ.

Kedu ihe dị njọ na OFFSET na LIMIT?

Dị ka ekwuola, OFFSET и LIMIT Ha na-arụ ọrụ nke ọma na ọrụ ndị na-adịghị mkpa na-arụ ọrụ na nnukwu ego nke data.

Nsogbu a na-ebilite mgbe nchekwa data tolitere ruo ogo nke na ọ naghị adaba na ebe nchekwa ihe nkesa. Otú ọ dị, mgbe ị na-arụ ọrụ na nchekwa data a, ị ga-eji ajụjụ ndị nwere pagined.

Ka nsogbu a pụta ìhè, a ga-enwerịrị ọnọdụ nke DBMS na-amalite na-arụ ọrụ nyocha zuru ezu na-adịghị arụ ọrụ na ajụjụ ọ bụla e depụtara (mgbe ntinye na nhichapụ ọrụ nwere ike ime, na anyị achọghị data ochie!).

Kedu ihe bụ "nyocha tebụl zuru oke" (ma ọ bụ "nyocha tebụl usoro", Nyocha usoro)? Nke a bụ ọrụ n'oge DBMS na-agụ usoro nke ọ bụla nke tebụl, ya bụ, data dị na ya, wee lelee ha maka nnabata n'ọnọdụ enyere. A maara ụdị nyocha tebụl dị ka nke kachasị nwayọ. Nke bụ eziokwu bụ na mgbe emechara ya, a na-arụ ọtụtụ ọrụ ntinye/mpụta nke gụnyere sistemụ diski diski nke ihe nkesa. Ọnọdụ ahụ na-akawanye njọ site na nkwụsịtụ jikọtara ya na-arụ ọrụ na data echekwara na diski, na eziokwu ahụ bụ na ịnyefe data site na diski na ebe nchekwa bụ ọrụ na-arụ ọrụ nke ọma.

Dịka ọmụmaatụ, ị nwere ndekọ nke ndị ọrụ 100000000 ma ị na-eji ihe nrụpụta ahụ mee ajụjụ OFFSET 50000000. Nke a pụtara na DBMS ga-ebu ihe ndekọ ndị a niile (ma anyị anaghị achọ ha!), Tinye ha na ebe nchekwa, ma mgbe nke ahụ gasịrị, sịnụ, nsonaazụ 20 kọrọ na LIMIT.

Ka anyị kwuo na ọ nwere ike ịdị ka nke a: "họrọ ahịrị site na 50000 ruo 50020 site na 100000." Ya bụ, sistemụ ahụ ga-ebu ụzọ buru ahịrị 50000 iji mezue ajụjụ ahụ. Ị̀ hụla ọrụ na-adịghị mkpa ọ ga-arụ?

Ọ bụrụ na ị kwenyeghị m, lelee ihe atụ m kere site na iji njirimara db-fiddle.com

Zere iji OFFSET na LIMIT n'ajụjụ ndị edebere
Ọmụmaatụ na db-fiddle.com

N'ebe ahụ, n'aka ekpe, n'ọhịa Schema SQL, enwere koodu na-etinye ahịrị 100000 n'ime nchekwa data, na n'aka nri, n'ọhịa Query SQL, egosiri ajụjụ abụọ. Nke mbụ, nke dị nwayọ, dị ka nke a:

SELECT *
FROM `docs`
LIMIT 10 OFFSET 85000;

Na nke abụọ, nke bụ ihe ngwọta dị irè maka otu nsogbu ahụ, dị ka nke a:

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

Iji mezuo arịrịọ ndị a, pịa bọtịnụ ahụ Run n'elu ibe. Mgbe emechara nke a, anyị na-atụnyere ozi gbasara oge mmezu ajụjụ. Ọ na-apụta na imezu ajụjụ na-adịghị arụ ọrụ na-ewe ma ọ dịkarịa ala ugboro 30 karịa ime nke abụọ (oge a dịgasị iche site na ọsọ gaa na-agba ọsọ; dịka ọmụmaatụ, usoro ahụ nwere ike ịkọ na ajụjụ mbụ ahụ weere 37 ms iji wuchaa, mana mmezu nke nke abụọ - 1 ms).

Ma ọ bụrụ na enwere data ndị ọzọ, mgbe ahụ, ihe niile ga-adị njọ karị (iji kwenye na nke a, lee anya m ihe atụ na ahịrị 10 nde).

Ihe anyị tụlere ugbu a kwesịrị inye gị ụfọdụ nghọta ka esi ahazi ajụjụ nchekwa data n'ezie.

Biko mara na ọnụ ahịa ahụ dị elu OFFSET - ogologo oge nke arịrịọ ahụ ga-ewe iji wuchaa.

Kedu ihe m ga-eji kama nchikota OFFSET na LIMIT?

Kama nchikota OFFSET и LIMIT Ọ bara uru iji ihe owuwu wuru dị ka atụmatụ ndị a si dị:

SELECT * FROM table_name WHERE id > 10 LIMIT 20

Nke a bụ mmezu ajuju site na iji cursor dabere na pagination.

Kama ịchekwa ndị dị ugbu a na mpaghara OFFSET и LIMIT ma nyefee ha na arịrịọ ọ bụla, ịkwesịrị ịchekwa igodo mbụ enwetara ikpeazụ (na-abụkarị nke a bụ ID) na LIMIT, N'ihi ya, a ga-enweta ajụjụ ndị yiri nke a.

Gịnị kpatara? Isi ihe bụ na site n'ịkọwapụta n'ụzọ doro anya ihe nchọpụta nke ahịrị ikpeazụ a gụrụ, ị ga-agwa DBMS gị ebe ọ kwesịrị ịmalite ịchọ data dị mkpa. Ọzọkwa, nchọta, ekele maka iji igodo ahụ, ga-arụ ọrụ nke ọma; usoro ahụ agaghị enwe ndọpụ uche site na ahịrị na-abụghị oke akọwapụtara.

Ka anyị leba anya na ntụnyere arụmọrụ dị iche iche na-esote. Nke a bụ ajụjụ na-adịghị arụ ọrụ.

Zere iji OFFSET na LIMIT n'ajụjụ ndị edebere
Arịrịọ nwayọ

Ma ebe a bụ ụdị nke arịrịọ a kachasị mma.

Zere iji OFFSET na LIMIT n'ajụjụ ndị edebere
Arịrịọ ngwa ngwa

Ajụjụ abụọ a na-eweghachite kpọmkwem otu ọnụọgụ data. Mana nke mbụ na-ewe sekọnd 12,80 iji wuchaa, nke abụọ na-ewe 0,01 sekọnd. Ị na-eche ihe dị iche?

Nsogbu puru ime

Ka usoro ajụjụ a chọrọ ka ọ rụọ ọrụ nke ọma, tebulu ahụ ga-enwerịrị kọlụm (ma ọ bụ kọlụm) nwere akara nrịbama pụrụ iche, dị ka ihe nchọpụta integer. N'ọnọdụ ụfọdụ akọwapụtara, nke a nwere ike ikpebi ịga nke ọma nke iji ajụjụ ndị dị otú ahụ mee ka ọsọ nke ịrụ ọrụ na nchekwa data dịkwuo elu.

Dị ka o kwesịrị ịdị, mgbe ị na-arụ ajụjụ, ịkwesịrị iburu n'uche ụdị ihe owuwu nke tebụl ma họrọ usoro ndị ahụ ga-arụ ọrụ kacha mma na tebụl ndị dị ugbu a. Dịka ọmụmaatụ, ọ bụrụ na ịchọrọ ịrụ ọrụ na ajụjụ nwere nnukwu data metụtara, ị nwere ike ịhụ ya na-adọrọ mmasị nke a edemede.

Ọ bụrụ na anyị na-eche nsogbu nke na-efu isi isi, dịka ọmụmaatụ, ọ bụrụ na anyị nwere tebụl nwere ọtụtụ mmekọrịta, mgbe ahụ, usoro omenala nke iji. OFFSET и LIMIT, na-ekwe nkwa na ọ ga-adabara anyị. Mana iji ya nwere ike ibute ajụjụ ndị nwere ike ịdị nwayọ. N'ọnọdụ ndị dị otú ahụ, a ga m akwado iji igodo na-abawanye na-akpaghị aka, ọbụlagodi ma ọ bụrụ na ọ dị mkpa iji dozie ajụjụ ndị edere ede.

Ọ bụrụ na ị nwere mmasị na isiokwu a - lee, lee и lee - ọtụtụ ihe bara uru.

Nsonaazụ

Isi nkwubi okwu anyị nwere ike ịbịaru bụ na, n'agbanyeghị nha data data anyị na-ekwu maka ya, ọ dị mkpa mgbe niile iji nyochaa ọsọ nke mmezu ajụjụ. N'oge a, scalability nke ngwọta dị oke mkpa, ma ọ bụrụ na e mere ihe niile n'ụzọ ziri ezi site na mmalite nke ịrụ ọrụ na usoro ụfọdụ, nke a, n'ọdịnihu, nwere ike ịzọpụta onye mmepụta site na ọtụtụ nsogbu.

Kedu otu esi enyocha ma kwalite ajụjụ nchekwa data?

Zere iji OFFSET na LIMIT n'ajụjụ ndị edebere

isi: www.habr.com

Tinye a comment