Ua mou atu aso na e le tau popole ai e uiga i le fa'amalieina o fa'atinoga o fa'amaumauga. E le tumau le taimi. Soʻo se pisinisi fou tekonolosi e manaʻo e fatuina le isi Facebook, aʻo taumafai e aoina uma faʻamatalaga e mafai ona latou maua. E manaʻomia e pisinisi nei faʻamatalaga e faʻaleleia atili ai faʻataʻitaʻiga faʻataʻitaʻiga e fesoasoani ia i latou e maua ai tupe. I ia tulaga, e manaʻomia e le au fai polokalame le fatuina o API e mafai ai ona latou galulue vave ma faʻatuatuaina ma le tele o faʻamatalaga.
Afai o lo'o e fuafuaina le fa'aoga po'o fa'amaumauga i tua o fa'amaumauga mo so'o se taimi umi, masalo ua e tusia ni fa'ailoga e fa'atino ai fa'amatalaga fa'aigoa. Mo se faʻataʻitaʻiga, pei o lenei:
SELECT * FROM table_name LIMIT 10 OFFSET 40
O le auala e iai?
Ae afai o le auala lea na e faia ai lau pagination, ou te faamalie atu e te leʻi faia i se auala sili ona lelei.
E te fia tetee mai ia te au?
Ta'u mai ia le itiiti ifo ma le tasi le tagata atia'e pito i tua e le'i fa'aaogaina lava OFFSET
и LIMIT
e fa'atino fa'ailoga fa'ailoga. I le MVP (Minimum Viable Product) ma i galuega faatino e fa'aogaina ai ni fa'amatalaga laiti, o lenei faiga e fa'aoga talafeagai. “E na o le galue lava,” o lona uiga.
Ae afai e te manaʻomia le fatuina o faiga faʻalagolago ma lelei mai le sasa, e tatau ona e faʻaeteete muamua e uiga i le lelei o le fesiligia o faʻamaumauga o loʻo faʻaaogaina i ia faiga.
O le asō o le a tatou talanoa e uiga i faʻafitauli i le masani ona faʻaaogaina (leaga) faʻatinoga o faʻailoga faʻailoga faʻailoga, ma pe faʻapefea ona ausia le maualuga pe a faʻatino ia fesili.
O le a le mea o faaletonu ile OFFSET ma le LIMIT?
E pei ona uma ona fai atu, OFFSET
и LIMIT
Latou te faʻatinoina lelei i galuega faatino e le manaʻomia le galue ma le tele o faʻamaumauga.
O le faʻafitauli e tulaʻi mai pe a faʻatupulaʻia le database i se lapoʻa e le toe fetaui i le mafaufau o le server. Ae ui i lea, a e galue ma lenei faʻamaumauga, e manaʻomia lou faʻaogaina o fesili faʻasalalau.
Mo lenei faʻafitauli e faʻaalia ia lava, e tatau ona i ai se tulaga e faʻaogaina ai e le DBMS se faʻaoga le lelei o le Full Table Scan i luga o fesili faʻapitonuʻu taʻitasi (aʻo faʻapipiʻi ma tapeina gaioiga e ono tupu, ma matou te le manaʻomia ni faʻamatalaga tuai!).
O le a le “fa'asologa o laulau atoa” (po'o le “fa'asologa o laulau fa'asolosolo”, Fa'asologa Fa'asologa)? Ole fa'agaioiga lea e faitau fa'asolosolo ai e le DBMS laina ta'itasi o le laulau, o lona uiga, o fa'amaumauga o lo'o iai i totonu, ma siaki ai mo le tausisia o se tu'utu'uga. O lenei ituaiga su'ega laulau ua iloa e sili ona tuai. O le mea moni o le taimi e faʻataunuʻu ai, e tele faʻaoga faʻaoga / mea e faʻatinoina e aofia ai le subsystem disk a le server. O le tulaga e sili atu ona leaga ona o le le tumau e fesoʻotaʻi ma le galue ma faʻamaumauga o loʻo teuina i luga o tisiki, ma o le mea moni o le fesiitaiga o faʻamatalaga mai le disk i le manatua o se faʻagaioiga malosi.
Mo se faʻataʻitaʻiga, o loʻo i ai au faʻamaumauga o le 100000000 tagata faʻaoga ma e te faʻatautaia se fesili ma le fausiaina OFFSET 50000000
. O lona uiga e tatau i le DBMS ona utaina uma nei faamaumauga (ma matou te le manaʻomia lava!), tuʻu i latou i le mafaufau, ma a maeʻa lena, fai mai, 20 iʻuga na lipotia i totonu. LIMIT
.
Sei tatou fai atu atonu e pei o lenei: "filifili laina mai le 50000 i le 50020 mai le 100000". O lona uiga, e manaʻomia muamua e le faiga le utaina o laina 50000 e faʻamaeʻa ai le fesili. Pe e te iloa le tele o galuega lē manaʻomia e tatau ona ia faia?
Afai e te le talitonu ia te aʻu, vaʻai i le faʻataʻitaʻiga na ou faia e faʻaaoga ai foliga
Faataitaiga ile db-fiddle.com
O iina, i le itu tauagavale, i le fanua Schema SQL
, o loʻo i ai le faʻailoga e tuʻu ai 100000 laina i totonu o faʻamaumauga, ma i le itu taumatau, i le fanua. Query SQL
, e lua fesili o loʻo faʻaalia. O le muamua, fa'agesegese, e pei o lenei:
SELECT *
FROM `docs`
LIMIT 10 OFFSET 85000;
Ma o le lona lua, o se fofo aoga i le faafitauli lava e tasi, e pei o lenei:
SELECT *
FROM `docs`
WHERE id > 85000
LIMIT 10;
Ina ia faʻataunuʻuina nei talosaga, naʻo le kiliki i luga o le ki Run
i le pito i luga o le itulau. A uma ona faia lenei mea, matou te faʻatusatusaina faʻamatalaga e uiga i le taimi o le faʻatinoina o fesili. E aliali mai o le faʻatinoina o se fesili le aoga e manaʻomia le itiiti ifo i le 30 taimi le umi nai lo le faʻatinoina o le lona lua (o le taimi lenei e ese mai le tamoe i le tamoe; mo se faʻataʻitaʻiga, e mafai e le faiga ona lipotia o le fesili muamua na ave le 37 ms e faʻamaeʻa ai, ae o le faʻatinoina o le lona lua - 1 ms).
Ma afai e tele faʻamatalaga, o mea uma o le a sili atu ona leaga (ina ia faʻamaonia lenei mea, vaʻai i laʻu
O mea na matou talanoaina e tatau ona tu'uina atu ia te oe ni fa'amatalaga i le auala e fa'agasolo moni ai fa'amatalaga fa'amaumauga.
Faamolemole ia matau o le maualuga o le tau OFFSET
- ole umi ole talosaga e fa'auma.
O le a le mea e tatau ona ou faʻaogaina nai lo le tuʻufaʻatasia o OFFSET ma LIMIT?
Nai lo o se tuufaatasiga OFFSET
и LIMIT
E aoga le faʻaaogaina o se fausaga fausia e tusa ai ma le polokalame lenei:
SELECT * FROM table_name WHERE id > 10 LIMIT 20
Ole fa'atinoga ole fesili lea ile fa'asino ile fa'asino ile fa'ailoga.
Nai lo le teuina o mea fou i le lotoifale OFFSET
и LIMIT
ma tuʻuina atu i talosaga taʻitasi, e te manaʻomia le teuina o le ki autu mulimuli na maua (e masani lava o le ID
) ma LIMIT
, o se taunuuga, o le a maua fesili e pei o luga.
Aisea? O le manatu e ala i le faʻamaonia manino o le faʻamatalaga o le laina mulimuli faitau, e te taʻu atu i lau DBMS le mea e manaʻomia e amata suʻe ai faʻamatalaga talafeagai. E le gata i lea, o le sailiga, faʻafetai i le faʻaogaina o le ki, o le a faʻatinoina lelei;
Se'i tatou va'ai i le fa'atusatusaga o fa'atinoga o fesili eseese. Ole fesili le aoga lea.
Talosaga lemu
Ma o se faʻamatalaga sili ona lelei o lenei talosaga.
Talosaga vave
O fesili uma e lua e toe faʻafoʻi tutusa le aofaʻi o faʻamatalaga. Ae o le muamua e 12,80 sekone e fa'amae'a ai, ae o le lona lua e 0,01 sekone. E te lagona le eseesega?
Faʻaiʻuga ono
Mo le auala e fa'atatau i fesili e galue lelei, o le laulau e tatau ona i ai se koluma (po'o koluma) o lo'o i ai fa'ailoga tulaga ese, fa'asologa, e pei o se fa'ailoga numera. I nisi o tulaga fa'apitoa, e ono fa'amauina ai le manuia o le fa'aogaina o ia fa'afesili e fa'ateleina ai le saoasaoa o le galue ma le fa'amaumauga.
E masani lava, pe a fausia ni fesili, e tatau ona e amanaʻia le fausaga faʻapitoa o laulau ma filifili na masini e sili ona aoga i luga o laulau o loʻo iai. Mo se faʻataʻitaʻiga, afai e te manaʻomia le galue i fesili ma le tele o voluma o faʻamatalaga fesoʻotaʻi, atonu e te fiafia i ai
Afai tatou te feagai ma le faʻafitauli o le misia o se ki autu, mo se faʻataʻitaʻiga, pe a fai o loʻo i ai se matou laulau ma se vaʻaiga tele-i-tele, o le auala masani o le faʻaaogaina. OFFSET
и LIMIT
, ua mautinoa e fetaui ma i tatou. Ae o lona fa'aogaina e ono i'u ai i ni fesili e ono tuai. I ia tulaga, ou te fautuaina le faʻaaogaina o le auto-incrementing primary key, e tusa lava pe naʻo le manaʻomia e faʻatautaia ai fesili faʻasalalau.
Afai e te fiafia i lenei mataupu -
O taunuʻuga
O le faaiuga autu e mafai ona tatou tusia, e tusa lava po o le a le tele o faʻamaumauga o loʻo tatou talanoa ai, e manaʻomia i taimi uma le suʻesuʻeina o le saoasaoa o le faʻatinoina o fesili. I aso nei, o le faʻalauteleina o fofo e matua taua lava, ma afai e saʻo mea uma mai le amataga o le galue i luga o se faiga faʻapitoa, o le mea lea, i le lumanaʻi, e mafai ona laveaʻiina le atinaʻe mai le tele o faʻafitauli.
E fa'afefea ona e su'esu'eina ma fa'asilisili fesili i fa'amaumauga?
puna: www.habr.com