Fadio ny mampiasa OFFSET sy LIMIT amin'ny fanontaniana misy pejy

Lasa ny andro izay tsy mila manahy momba ny fanatsarana ny fahombiazan'ny angona. Tsy mijanona ny fotoana. Ny mpandraharaha ara-teknolojia vaovao rehetra dia maniry ny hamorona Facebook manaraka, raha miezaka manangona ny angon-drakitra rehetra azon'izy ireo atao. Mila an'io angona io ny orinasa mba hampiofanana modely manampy azy ireo hahazoany vola. Amin'ny toe-javatra toy izany, mila mamorona API ahafahan'izy ireo miasa haingana sy azo itokisana miaraka amin'ny fampahalalana be dia be ny mpandrindra.

Fadio ny mampiasa OFFSET sy LIMIT amin'ny fanontaniana misy pejy

Raha efa namolavola fampiharana na backends angon-drakitra nandritra ny fotoana ela ianao, dia azo inoana fa nanoratra kaody ianao mba hampandehanana fanontaniana misy pejy. Ohatra, toy izao:

SELECT * FROM table_name LIMIT 10 OFFSET 40

Ny fomba izany?

Fa raha toy izao no nanaovanao ny pagination dia miala tsiny aho milaza fa tsy nanao izany tamin'ny fomba mahomby indrindra ianao.

Te hanohitra ahy ve ianao? Azonao atao tsy mandany врСмя. hiahotrahoranareo, Shopify ΠΈ Mixmax Efa mampiasa ny teknika tiako resahina anio izy ireo.

Lazao, fara fahakeliny, mpandrindra backend izay mbola tsy nampiasa OFFSET ΠΈ LIMIT mba hanatanteraka fanontaniam-pejy. Ao amin'ny MVP (Product Viable Minimum) sy amin'ny tetikasa izay misy angon-drakitra kely ampiasaina, ity fomba ity dia azo ampiharina. β€œMiasa fotsiny” izany, raha azo lazaina.

Fa raha mila mamorona rafitra azo antoka sy mahomby hatrany am-boalohany ianao, dia tokony hikarakara mialoha ny fahombiazan'ny fangatahana ny angon-drakitra ampiasaina amin'ny rafitra toy izany.

Androany isika dia hiresaka momba ny olana amin'ny fampiharana fampiasa matetika (ratsy loatra) amin'ny motera fangatahana fanontana pejy, sy ny fomba hahazoana fahombiazana ambony rehefa manatanteraka fanontaniana toy izany.

Inona no tsy mety amin'ny OFFSET sy LIMIT?

Araka ny efa voalaza, OFFSET ΠΈ LIMIT Manatanteraka tsara izy ireo amin'ny tetikasa izay tsy mila miasa amin'ny angon-drakitra be dia be.

Mipoitra ny olana rehefa mihalehibe ny angon-drakitra ka tsy mifanaraka amin'ny fitadidian'ny mpizara intsony. Na izany aza, rehefa miasa miaraka amin'ity angon-drakitra ity ianao, dia mila mampiasa fanontana pejy misy pejy.

Mba hisehoan'ity olana ity, dia tsy maintsy misy toe-javatra izay ampiasain'ny DBMS amin'ny asa Scan Table feno tsy mahomby amin'ny fanontaniana tsirairay misy pejy (raha toa ka misy ny fampidirana sy famafana, ary tsy mila angon-drakitra efa lany andro izahay!).

Inona no atao hoe "scanner table feno" (na "scanner table de sΓ©quential", Squential Scan)? Ity dia hetsika iray izay hamakian'ny DBMS ny andalana tsirairay amin'ny latabatra, izany hoe ny angona voarakitra ao, ary hanamarina azy ireo amin'ny fanarahana fepetra iray. Ity karazana scan table ity dia fantatra fa miadana indrindra. Ny zava-misy dia rehefa tanterahana izany dia maro ny hetsika fampidirana/famoahana no atao izay misy ny subsystem kapila an'ny mpizara. Miharatsy ny toe-draharaha noho ny fahatarana mifandray amin'ny fiasana amin'ny angon-drakitra voatahiry amin'ny kapila, ary ny famindrana angon-drakitra avy amin'ny kapila mankany amin'ny fitadidiana dia asa mavesa-danja.

Ohatra, manana firaketana mpampiasa 100000000 ianao ary mametraka fanontaniana miaraka amin'ny fananganana OFFSET 50000000. Midika izany fa ny DBMS dia tsy maintsy mameno ireo rakitsoratra rehetra ireo (ary tsy mila azy ireo akory izahay!), Ataovy ao anaty fitadidiana izy ireo, ary aorian'izay dia raiso, lazao, valiny 20 no notaterina tao. LIMIT.

Aoka hatao hoe mety ho toy izao izany: "mifantina andalana avy amin'ny 50000 ka hatramin'ny 50020 amin'ny 100000". Izany hoe, mila mametraka laharana 50000 aloha ny rafitra hamita ny fangatahana. Hitanao ve hoe hatraiza ny asa tsy ilaina hataony?

Raha tsy mino ahy ianao dia jereo ny ohatra noforoniko tamin'ny fampiasana ireo endri-javatra db-fiddle.com

Fadio ny mampiasa OFFSET sy LIMIT amin'ny fanontaniana misy pejy
Ohatra ao amin'ny db-fiddle.com

Ao, eo ankavia, eny an-tsaha Schema SQL, misy kaody mampiditra andalana 100000 ao anaty angon-drakitra, ary eo ankavanana, ao amin'ny saha Query SQL, fanontaniana roa no aseho. Ny voalohany, miadana, dia toy izao:

SELECT *
FROM `docs`
LIMIT 10 OFFSET 85000;

Ary ny faharoa, izay vahaolana mahomby amin'ny olana mitovy, dia toy izao:

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

Mba hanatanterahana ireo fangatahana ireo dia tsindrio fotsiny ny bokotra Run eo an-tampon'ny pejy. Rehefa vita izany, dia mampitaha vaovao momba ny fotoana fanatanterahana ny fangatahana. Hita fa ny fanatanterahana fanontaniana tsy mahomby dia maharitra in-30 farafahakeliny noho ny fanatanterahana ny faharoa (miovaova amin'ny run to run; ohatra, ny rafitra dia mety mitatitra fa ny fangatahana voalohany dia naka 37 ms vao vita, fa ny fanatanterahana ny faharoa - 1 ms).

Ary raha misy angon-drakitra bebe kokoa, dia ho ratsy kokoa ny zava-drehetra (mba ho resy lahatra amin'izany, jereo ny my ohatra miaraka amin'ny laharana 10 tapitrisa).

Ny vao avy noresahintsika dia tokony hanome anao fanazavana momba ny fomba fiasan'ny antontan-taratasim-panontaniana marina.

Mariho fa ny ambony ny sandany OFFSET - ny ela kokoa ny fangatahana ho vita.

Inona no tokony hampiasaiko fa tsy ny fitambaran'ny OFFSET sy LIMIT?

Raha tokony ho fitambarana OFFSET ΠΈ LIMIT Ilaina ny mampiasa rafitra naorina araka ity drafitra manaraka ity:

SELECT * FROM table_name WHERE id > 10 LIMIT 20

Ity dia fanatanterahana fanontaniana miaraka amin'ny pagination mifototra amin'ny cursor.

Raha tokony hitahiry ny ankehitriny eo an-toerana OFFSET ΠΈ LIMIT ary mandefa azy ireo amin'ny fangatahana tsirairay, mila mitahiry ny fanalahidy voalohany voaray farany ianao (matetika ity ID) ary LIMIT, vokatr'izany dia hisy fanontaniana mitovy amin'ny voalaza etsy ambony.

Nahoana? Ny tiana holazaina dia amin'ny alalan'ny famaritana mazava ny famantarana ny laharana farany novakiana, dia lazainao amin'ny DBMS anao hoe aiza no tokony hanombohana hikaroka ny angona ilaina. Ankoatra izany, ny fikarohana, noho ny fampiasana ny fanalahidy, dia ho tanterahina amin'ny fomba mahomby;

Andeha hojerentsika ireto fampitahana fampisehoana manaraka ireto amin'ny fanontaniana isan-karazany. Ity misy fanontaniana tsy mahomby.

Fadio ny mampiasa OFFSET sy LIMIT amin'ny fanontaniana misy pejy
Mangataka miadana

Ary ity misy dikan-teny optimized an'ity fangatahana ity.

Fadio ny mampiasa OFFSET sy LIMIT amin'ny fanontaniana misy pejy
Fangatahana haingana

Mitovy tanteraka amin'ny angon-drakitra ireo fanontaniana roa ireo. Fa ny voalohany dia mila 12,80 segondra, ary ny faharoa - 0,01 segondra. Tsapanao ve ny fahasamihafana?

Olana mety

Mba hampandeha tsara ny fomba fanontanina naroso, ny latabatra dia tsy maintsy manana tsanganana (na tsanganana) misy tondro tsy manam-paharoa, misesy, toy ny famantarana integer. Amin'ny tranga manokana sasany dia mety hamaritra ny fahombiazan'ny fampiasana fanontaniana toy izany hampitombo ny hafainganam-pandehan'ny miasa miaraka amin'ny angon-drakitra izany.

Mazava ho azy, rehefa manangana fanontaniana dia mila mandinika ny maritrano manokana amin'ny latabatra ianao ary misafidy ireo mekanika izay hiasa tsara indrindra amin'ny latabatra efa misy. Ohatra, raha mila miasa amin'ny fanontaniana miaraka amin'ny angona mifandraika be dia be ianao, dia mety ho hitanao fa mahaliana izany izany lahatsoratra.

Raha sendra olana amin'ny tsy fahampian'ny fanalahidy fototra isika, ohatra, raha manana latabatra misy fifandraisana marobe amin'ny maro, dia ny fomba nentim-paharazana amin'ny fampiasana OFFSET ΠΈ LIMIT, dia azo antoka fa mifanaraka aminay. Saingy ny fampiasana azy dia mety hiteraka fanontaniana miadana. Amin'ny toe-javatra toy izany, dia manoro hevitra aho ny hampiasa lakile voalohany mitombo mandeha ho azy, na dia ilaina ihany aza ny mikarakara fanontaniana misy pejy.

Raha liana amin'ity lohahevitra ity ianao - eto, eto ΠΈ eto - fitaovana mahasoa maro.

vokatra

Ny fehin-kevitra lehibe azontsika tsoahina dia ny hoe, na inona na inona haben'ny angon-drakitra resahina, dia ilaina foana ny mandinika ny hafainganam-pandehan'ny fangatahana. Amin'izao fotoana izao, ny scalability ny vahaolana dia tena zava-dehibe, ary raha ny zava-drehetra dia natao tsara hatrany am-piandohana ny asa amin'ny rafitra iray, izany, amin'ny ho avy, dia afaka hamonjy ny developer amin'ny olana maro.

Ahoana no anadihadianao sy amboarinao ny fangatahana angon-drakitra?

Fadio ny mampiasa OFFSET sy LIMIT amin'ny fanontaniana misy pejy

Source: www.habr.com

Add a comment