Guji yin amfani da OFFSET da LIMIT a cikin tambayoyin da aka buga

An tafi kwanakin da ba lallai ne ku damu da inganta aikin bayanai ba. Lokaci bai tsaya cak ba. Kowane sabon dan kasuwa na fasaha yana son ƙirƙirar Facebook na gaba, yayin ƙoƙarin tattara duk bayanan da za su iya samu. Kasuwanci suna buƙatar wannan bayanan don ingantattun samfuran horarwa waɗanda ke taimaka musu samun kuɗi. A irin waɗannan yanayi, masu shirye-shirye suna buƙatar ƙirƙirar APIs waɗanda ke ba su damar yin aiki cikin sauri da dogaro da adadi mai yawa na bayanai.

Guji yin amfani da OFFSET da LIMIT a cikin tambayoyin da aka buga

Idan kun kasance kuna zana aikace-aikacen ko bayanan bayanan baya na kowane tsawon lokaci, tabbas kun rubuta lamba don gudanar da tambayoyin da ba a sani ba. Misali, kamar haka:

SELECT * FROM table_name LIMIT 10 OFFSET 40

Yadda yake?

Amma idan haka ne kuka yi rubutunku, kuyi hakuri a ce ba ku yi shi ta hanya mafi inganci ba.

Kuna so ku ƙi ni? Kuna iya ba kashe время. slack, Shopify и mixmax Sun riga sun yi amfani da dabarun da nake son magana akai a yau.

Sunan aƙalla mai haɓaka baya ɗaya wanda bai taɓa amfani da shi ba OFFSET и LIMIT don yin tambayoyin da ba su da tushe. A cikin MVP (Mafi ƙarancin Samfura) da kuma a cikin ayyukan da ake amfani da ƙananan adadin bayanai, wannan hanyar ta dace sosai. Yana "kawai yana aiki," don yin magana.

Amma idan kuna buƙatar ƙirƙirar ingantaccen tsari da ingantaccen tsari daga karce, yakamata ku kula da gaba game da ingancin tambayar bayanan bayanan da aka yi amfani da su a cikin irin waɗannan tsarin.

A yau za mu yi magana game da matsalolin da aka saba amfani da su (ma munanan) aiwatar da injunan tambaya, da yadda ake samun babban aiki yayin aiwatar da irin waɗannan tambayoyin.

Me ke damun OFFSET da LIMIT?

Kamar yadda aka riga aka fada, OFFSET и LIMIT Suna yin kyau a cikin ayyukan da ba sa buƙatar yin aiki tare da adadi mai yawa na bayanai.

Matsalar tana tasowa ne lokacin da ma’adanar bayanai ta girma zuwa girman da ba ta dace da ƙwaƙwalwar uwar garken ba. Koyaya, lokacin aiki tare da wannan bayanan, kuna buƙatar amfani da tambayoyin da ba a sani ba.

Don wannan matsalar ta bayyana kanta, dole ne a sami wani yanayi wanda DBMS ke yin amfani da cikakken aikin Scan na Tebu mai ƙarancin inganci akan kowace tambaya mara kyau (yayin shigar da ayyukan sharewa na iya faruwa, kuma ba ma buƙatar bayanan da suka gabata!).

Menene “cikakken sikanin teburi” (ko “Scancan Teburi”, Sequential Scan)? Wannan wani aiki ne wanda DBMS a jere yana karanta kowane jere na tebur, wato, bayanan da ke cikinsa, da kuma bincika su don bin ƙa'idar da aka bayar. Wannan nau'in sikanin tebur an san shi shine mafi hankali. Gaskiyar ita ce, lokacin da aka aiwatar da shi, ana aiwatar da ayyukan shigarwa da fitarwa da yawa waɗanda suka haɗa da tsarin faifai na uwar garken. Lamarin ya fi muni ta hanyar latency da ke da alaƙa da aiki tare da bayanan da aka adana akan faifai, kuma gaskiyar cewa canja wurin bayanai daga faifai zuwa ƙwaƙwalwar ajiya aiki ne mai ƙarfi.

Misali, kuna da bayanan masu amfani 100000000 kuma kuna gudanar da tambaya tare da ginin. OFFSET 50000000. Wannan yana nufin cewa DBMS dole ne ya loda duk waɗannan bayanan (kuma ba ma buƙatar su!), Sanya su cikin ƙwaƙwalwar ajiya, kuma bayan wannan ɗauka, a ce, sakamakon 20 da aka ruwaito a ciki. LIMIT.

Bari mu ce yana iya zama kamar haka: "zabi layuka daga 50000 zuwa 50020 daga 100000". Wato tsarin zai fara loda layuka 50000 don kammala tambaya. Kuna ganin irin aikin da ba dole ba ne za ta yi?

Idan ba ku yarda da ni ba, duba misalin da na ƙirƙira ta amfani da fasalin db-fiddle.com

Guji yin amfani da OFFSET da LIMIT a cikin tambayoyin da aka buga
Misali a db-fiddle.com

Can, a hagu, a cikin filin Schema SQL, akwai lambar da ke shigar da layuka 100000 a cikin ma'ajin bayanai, kuma a dama, a cikin filin. Query SQL, an nuna tambayoyi biyu. Na farko, a hankali, yayi kama da haka:

SELECT *
FROM `docs`
LIMIT 10 OFFSET 85000;

Sannan na biyu, wanda shi ne ingantacciyar hanyar magance wannan matsala, ita ce kamar haka:

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

Domin cika waɗannan buƙatun, kawai danna maɓallin Run a saman shafin. Bayan mun yi wannan, muna kwatanta bayanai game da lokacin aiwatar da tambaya. Ya bayyana cewa aiwatar da tambaya mara inganci yana ɗaukar aƙalla sau 30 fiye da aiwatar da na biyun (wannan lokacin ya bambanta daga gudu zuwa gudu; misali, tsarin na iya bayar da rahoton cewa tambayar farko ta ɗauki 37 ms don kammalawa, amma aiwatarwar na biyu - 1 ms).

Kuma idan akwai ƙarin bayanai, to komai zai zama mafi muni (don tabbatar da wannan, duba nawa misali tare da layuka miliyan 10).

Abin da muka tattauna yanzu ya kamata ya ba ku ɗan haske kan yadda ake sarrafa tambayoyin bayanai a zahiri.

Lura cewa mafi girman ƙimar OFFSET - tsawon lokacin da buƙatar za ta ɗauka don kammalawa.

Menene zan yi amfani da shi maimakon haɗin OFFSET da LIMIT?

Maimakon haɗuwa OFFSET и LIMIT Yana da kyau a yi amfani da tsarin da aka gina bisa ga makirci mai zuwa:

SELECT * FROM table_name WHERE id > 10 LIMIT 20

Wannan ita ce aiwatar da tambayar tare da tushen siginan kwamfuta.

Maimakon adana na yanzu a cikin gida OFFSET и LIMIT kuma aika su tare da kowace buƙata, kuna buƙatar adana maɓallin farko da aka karɓa na ƙarshe (yawanci wannan shine ID) da kuma LIMIT, a sakamakon haka, za a sami tambayoyi masu kama da na sama.

Me yasa? Ma'anar ita ce ta hanyar bayyana mai gano layin ƙarshe na karantawa, za ku gaya wa DBMS ɗinku inda yake buƙatar fara neman mahimman bayanai. Bugu da ƙari, binciken, godiya ga amfani da maɓalli, za a gudanar da shi yadda ya kamata; tsarin ba dole ba ne ya shagaltar da layin da ke waje da kewayon da aka ƙayyade.

Bari mu kalli kwatancen aikin mai zuwa na tambayoyi daban-daban. Ga tambaya mara inganci.

Guji yin amfani da OFFSET da LIMIT a cikin tambayoyin da aka buga
A hankali bukatar

Kuma ga ingantaccen sigar wannan buƙatar.

Guji yin amfani da OFFSET da LIMIT a cikin tambayoyin da aka buga
Buƙatar gaggawa

Duk tambayoyin biyu suna dawowa daidai adadin bayanai iri ɗaya. Amma na farko yana ɗaukar daƙiƙa 12,80 don kammalawa, na biyu kuma yana ɗaukar daƙiƙa 0,01. Kuna jin bambancin?

Matsaloli masu yiwuwa

Domin hanyar tambayar da aka tsara ta yi aiki yadda ya kamata, teburin dole ne ya kasance yana da ginshiƙi (ko ginshiƙai) mai ƙunshe da na musamman, fihirisa jeri, kamar mai gano lamba. A wasu takamaiman lokuta, wannan na iya ƙayyade nasarar amfani da irin waɗannan tambayoyin don ƙara saurin aiki tare da bayanan bayanai.

A dabi'a, lokacin gina tambayoyin, kuna buƙatar yin la'akari da ƙayyadaddun tsarin gine-gine na tebur kuma zaɓi waɗannan hanyoyin da za su yi aiki mafi kyau akan teburin da ke akwai. Misali, idan kuna buƙatar yin aiki a cikin tambayoyi tare da ɗimbin bayanai masu alaƙa, kuna iya samun shi mai ban sha'awa wannan labarin.

Idan muna fuskantar matsalar rasa maɓalli na farko, alal misali, idan muna da tebur tare da alaƙa da yawa da yawa, to, tsarin gargajiya na amfani da shi. OFFSET и LIMIT, tabbas zai dace da mu. Amma amfani da shi na iya haifar da yuwuwar tambayoyin a hankali. A irin waɗannan lokuta, zan ba da shawarar yin amfani da maɓalli na farko da ke haɓakawa ta atomatik, koda kuwa ana buƙatar kawai don gudanar da tambayoyin bugu.

Idan kuna sha'awar wannan batu - ga shi, ga shi и ga shi - abubuwa masu amfani da yawa.

Sakamakon

Babban abin da za mu iya zana shi ne, komai girman rumbun adana bayanai da muke magana akai, ya zama dole a yi nazari kan saurin aiwatar da bincike. A zamanin yau, scalability na mafita yana da mahimmanci, kuma idan an tsara duk abin da aka tsara daidai daga farkon aiki akan wani tsarin, wannan, a nan gaba, zai iya ceton mai haɓakawa daga matsaloli masu yawa.

Ta yaya kuke tantancewa da haɓaka tambayoyin bayanai?

Guji yin amfani da OFFSET da LIMIT a cikin tambayoyin da aka buga

source: www.habr.com

Add a comment