Ka fogow isticmaalka OFFSET iyo LIMIT su'aalaha bogga ku qoran

Waxaa tagay maalmihii aadan ka walwalin hagaajinta waxqabadka xogta. Waqtigu ma istaago. Ganacsade kasta oo cusub oo tignoolajiyadeed ayaa raba inuu abuuro Facebook-ga soo socda, isagoo isku dayaya inuu ururiyo dhammaan xogta ay gacmahooda ku heli karaan. Ganacsiyadu waxay u baahan yihiin xogtan si ay u tababaraan moodooyinka ka caawinaya inay lacag sameeyaan. Xaaladahan oo kale, barnaamij-bixiyeyaashu waxay u baahan yihiin inay abuuraan API-yo u oggolaanaya inay si dhakhso leh oo la isku halleyn karo ula shaqeeyaan tiro badan oo macluumaad ah.

Ka fogow isticmaalka OFFSET iyo LIMIT su'aalaha bogga ku qoran

Haddii aad samaynaysay arji ama xog ururin muddo dheer ah, waxa ay u badan tahay in aad qortay kood si aad u socodsiiso su'aalaha boggaga leh. Tusaale ahaan, sida tan:

SELECT * FROM table_name LIMIT 10 OFFSET 40

Siday tahay?

Laakin haddii ay sidan tahay sidaad u samaysay boggaga, waan ka xumahay in aan sheego in aanad u samayn sida ugu waxtarka badan.

Ma waxaad rabtaa inaad iga soo horjeedo? Waxaad awoodi kartaa ma kharash garayn врСмя. debcin, Soo iibso ΠΈ Mixmax Waxay durba isticmaalayaan farsamooyinka aan rabo inaan maanta ka hadlo.

Magacaw ugu yaraan hal horumariye oo gadaal ka riixaya oo aan waligii isticmaalin OFFSET ΠΈ LIMIT si loo sameeyo su'aalo qoraal ah. MVP (Alaabada ugu yar ee la hirgalin karo) iyo mashaariicda lagu isticmaalo tiro yar oo xog ah, habkani waa mid aad loo dabaqi karo. Waa "kaliya shaqeeya," si loo hadlo.

Laakiin haddii aad u baahan tahay inaad abuurto nidaamyo la isku halayn karo oo hufan oo xoq ah, waa inaad horay uga sii taxadartaa waxtarka weydiinta xog-ururinta loo isticmaalo nidaamyadan oo kale.

Maanta waxaan ka hadli doonaa dhibaatooyinka sida caadiga ah loo isticmaalo (aad u xun) fulinta matoorada su'aalaha paginated, iyo sida loo gaaro waxqabadka sare marka fulinta weydiimaha sida.

Maxaa ka qaldan OFFSET iyo LIMIT?

Sida hore loo sheegay, OFFSET ΠΈ LIMIT Waxay si fiican u qabtaan mashaariicda aan u baahnayn inay ku shaqeeyaan tiro badan oo xog ah.

Dhibaatadu waxay soo ifbaxdaa marka kaydka kaydku uu weynaado oo aanu ku habboonayn xusuusta server-ka. Si kastaba ha ahaatee, marka aad la shaqaynayso xogtan, waxaad u baahan tahay inaad isticmaasho su'aalo qoraal ah.

Si ay dhibaatadani isu muujiso, waa in ay jirtaa xaalad ay DBMS u miciinsato hawl-gallo Miis Buuxa oo aan waxtar lahayn oo ku saabsan su'aal kasta oo bogagaysan (inta gelinta iyo tirtiridda laga yaabo inay dhacaan, oo uma baahnin xog duugowday!).

Waa maxay sawirka miis buuxa (ama "scan miis taxane ah", Scan taxane ah)? Kani waa hawlgal ay DBMS si isdaba joog ah u akhrinayso saf kasta oo miiska ah, taas oo ah, xogta ku jirta, oo ay hubiso u hoggaansanaanta shuruudda. Sawirka miiska noocaan ah waxaa la og yahay inuu yahay kan ugu gaabis ah. Xaqiiqdu waxay tahay in marka la fuliyo, hawlgallo badan oo wax-is-gelinta/soo-saarka ah ayaa la sameeyaa kuwaas oo ku lug leh nidaamka-hoosaadka diskka ee server-ka. Xaaladda waxaa ka sii daran habacsanaanta la xiriirta ku shaqeynta xogta ku kaydsan saxannada, iyo xaqiiqda ah in xogta laga soo wareejiyo diskka loona wareejiyo xusuusta waa hawl-gal kheyraad leh.

Tusaale ahaan, waxaad haysaa diiwaanada 100000000 isticmaalayaasha waxaadna ku waydiinaysaa dhismaha OFFSET 50000000. Tani waxay ka dhigan tahay in DBMS ay ku qasbanaan doonto inay ku shubto diiwaanadan oo dhan (iyo xitaa uma baahnin iyaga!), Ku rid xusuusta, ka dibna qaado, dheh, 20 natiijooyin ayaa la soo sheegay LIMIT.

Aynu nidhaahno waxay u ekaan kartaa sidan: "dooro safafka 50000 ilaa 50020 laga bilaabo 100000". Taasi waa, nidaamku wuxuu marka hore u baahan doonaa inuu ku shubo 50000 saf si uu u dhamaystiro weydiinta. Ma aragtaa inta shaqo ee aan loo baahnayn ay qaban doonto?

Haddii aad i rumaysan weydo, u fiirso tusaalaha aan abuuray anigoo isticmaalaya sifooyinka db-fiddle.com

Ka fogow isticmaalka OFFSET iyo LIMIT su'aalaha bogga ku qoran
Tusaale ahaan db-fiddle.com

Halkaa, dhanka bidix, garoonka dhexdiisa Schema SQL, waxa jira kood geliya 100000 saf oo kaydka ah, dhanka midigna, goobta Query SQL, laba su'aalood ayaa la muujiyay. Midka ugu horreeya, oo gaabis ah, wuxuu u eg yahay sidan:

SELECT *
FROM `docs`
LIMIT 10 OFFSET 85000;

Midda labaadna, oo isla mushkiladdaas xal wax ku ool ah u ah, waa sidan.

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

Si loo fuliyo codsiyadan, kaliya dhagsii badhanka Run xagga sare ee bogga. Markaan tan samaynay, waxaanu is barbar dhignay macluumaadka ku saabsan wakhtiga fulinta su'aasha. Waxaa soo baxday in fulinta su'aal aan tayo lahayn ay qaadato ugu yaraan 30 jeer ka badan fulinta kan labaad (waqtigani wuu kala duwan yahay orod ilaa socodsiin; tusaale ahaan, nidaamku wuxuu sheegi karaa in su'aasha koowaad ay qaadatay 37 ms si loo dhamaystiro, laakiin fulinta labaad - 1 ms).

Oo haddii ay jiraan xog dheeraad ah, markaas wax walba waxay u eegi doonaan xitaa ka sii xun (si aad tan ugu qanciso, fiiri aniga Tusaale oo leh 10 milyan oo saf).

Waxa aan hadda ka hadalnay waa in ay ku siiyaan xoogaa aragti ah sida dhab ahaan weydiimaha xogta xogta loo farsameeyo.

Fadlan ogow in qiimaha uu sarreeyo OFFSET - inta codsigu qaadan doono in la dhammaystiro.

Maxaan isticmaali lahaa beddelka isku darka OFFSET iyo LIMIT?

Halkii la isku daray OFFSET ΠΈ LIMIT Waxaa habboon in la isticmaalo qaab dhismeed si waafaqsan nidaamkan soo socda:

SELECT * FROM table_name WHERE id > 10 LIMIT 20

Tani waa fulinta su'aasha oo leh cursor ku salaysan bogga.

Halkii kuwa hadda jooga lagu kaydin lahaa gudaha OFFSET ΠΈ LIMIT oo u gudbi codsi kasta, waxaad u baahan tahay inaad kaydiso furaha aasaasiga ah ee ugu dambeeya ee la helay (badanaa kani waa ID) iyo LIMITNatiijo ahaan, su'aalo la mid ah kuwa kore ayaa la heli doonaa.

Waa maxay sababtu? Ujeeddadu waxay tahay adigoo si cad u qeexaya aqoonsiga safka ugu dambeeya ee la akhriyo, waxaad u sheegaysaa DBMS-gaaga meesha uu uga baahan yahay inuu bilaabo raadinta xogta lagama maarmaanka ah. Waxaa intaa dheer, raadinta, iyada oo ay ugu wacan tahay isticmaalka furaha, ayaa loo fulin doonaa si hufan; nidaamku maaha in lagu mashquuliyo khadadka ka baxsan xadka la cayimay.

Aynu eegno isbarbardhigga waxqabadka soo socda ee weydiimaha kala duwan. Halkan waa su'aal aan waxtar lahayn

Ka fogow isticmaalka OFFSET iyo LIMIT su'aalaha bogga ku qoran
Codsi tartiib ah

Oo halkan waa nooca la wanaajiyey ee codsigan.

Ka fogow isticmaalka OFFSET iyo LIMIT su'aalaha bogga ku qoran
Codsi degdeg ah

Labada su'aaloodba waxay soo celiyaan xog isku mid ah. Laakiin kan hore waxa uu qaadanayaa 12,80 ilbiriqsi, ka labaadna waxa uu qaadanayaa 0,01 ilbiriqsi. Ma dareemaysaa farqiga?

Dhibaatooyinka suurtagalka ah

Habka weydiinta la soo jeediyay si uu ugu shaqeeyo si wax ku ool ah, miisku waa inuu lahaadaa tiir (ama tiirar) ka kooban tilmaame gaar ah, sida tilmaame isugeyn. Xaaladaha gaarka ah qaarkood, tani waxay go'aamin kartaa guusha isticmaalka weydiimahan si loo kordhiyo xawaaraha la shaqeynta xogta macluumaadka.

Dabcan, marka la dhisayo su'aalaha, waxaad u baahan tahay inaad tixgeliso qaab dhismeedka gaarka ah ee miisaska oo aad dooratid hababka sida ugu fiican ugu shaqeyn doona miisaska jira. Tusaale ahaan, haddii aad u baahan tahay inaad ku shaqeyso su'aalo leh tiro badan oo xog ah oo la xidhiidha, waxaad u heli kartaa mid xiiso leh tan maqaal.

Haddii aan la kulanno dhibaatada maqnaanshaha furaha aasaasiga ah, tusaale ahaan, haddii aan haysano miis leh xiriir badan oo badan, markaa habka dhaqameed ee isticmaalka OFFSET ΠΈ LIMIT, waa la dammaanad qaaday inay nagu habboon tahay. Laakin isticmaalkeedu waxa uu keeni karaa su'aalo gaabis ah. Xaaladahan oo kale, waxaan ku talin lahaa in la isticmaalo furaha aasaasiga ah ee si toos ah u kordhiya, xitaa haddii loo baahan yahay oo kaliya in lagu qabto su'aalaha boggaga ku qoran.

Haddii aad xiisaynayso mawduucan - bal eega, bal eega ΠΈ bal eega - dhowr qalab oo waxtar leh.

Natiijooyinka

Gabagabada ugu weyn ee aan ka soo qaadan karno waa, iyada oo aan loo eegin baaxadda xogta macluumaadka ee aan ka hadlayno, waxaa mar walba lagama maarmaan ah in la falanqeeyo xawaaraha fulinta weydiinta. Maalmahan, scalability ee xalalka waa mid aad u muhiim ah, iyo haddii wax walba si sax ah loo qaabeeyey laga bilaabo bilowga hore ee ka shaqeynta nidaam gaar ah, tani, mustaqbalka, waxay badbaadin kartaa horumarinta dhibaatooyin badan.

Sideed u falanqaysaa oo aad u wanaajisaa weydiimaha kaydka?

Ka fogow isticmaalka OFFSET iyo LIMIT su'aalaha bogga ku qoran

Source: www.habr.com

Add a comment