Aisea e te manaʻomia ai meafaigaluega fesoasoani mo le faʻailoga i luga o ki?

Talofa uma! O aʻu o se tagata faʻapipiʻi tua e tusitusi microservices i Java + Spring. Ou te galue i se tasi o au atinaʻe oloa i totonu i Tinkoff.

Aisea e te manaʻomia ai meafaigaluega fesoasoani mo le faʻailoga i luga o ki?

I totonu o la matou 'au, o le fesili o le faʻamalieina o fesili i se DBMS e masani ona tulaʻi mai. E te manaʻo i taimi uma e te faʻavavevave teisi, ae e le mafai i taimi uma ona e faʻaogaina faʻamatalaga faʻatulagaina ma le mafaufau lelei-e tatau ona e suʻeina ni mea e faʻaogaina. I le taimi o se tasi o nei feʻaveaʻi i luga o le upega tafaʻilagi e suʻe ni faʻataʻitaʻiga talafeagai pe a galue ma faʻamaumauga, na ou mauaina Le blog fesoasoani e le gata a Marcus Wynand, tusitala o le SQL Performance Explained. O le ituaiga blog lea e seasea maua e mafai ona e faitau uma ai tala i se laina.

Ou te fia faaliliu se tala puupuu a Marcus mo oe. E mafai ona taʻua i nisi itu o se faʻaaliga e taumafai e tosina atu le mafaufau i le tuai, ae o loʻo iai pea le faʻafitauli o le faʻatinoga o le faʻaogaina o le faʻaogaina e tusa ai ma le tulaga SQL.

I nisi nofoaga o le a ou faaopoopo atu i le tusitala i faamatalaga ma faamatalaga. O le a ou faasino i nofoaga uma e pei o le "approx." mo le manino atili

Faʻatomuaga laitiiti

Ou te manatu e toʻatele tagata latou te iloa le faʻafitauli ma le faʻagesegese o le galue i itulau filifilia e ala i le offset. Na e iloa e mafai ona faigofie ona suia i se mamanu sili atu ona lelei?

O lea la, o le offset keyword e taʻu atu i le database e faaseʻe le muamua n faamaumauga i le talosaga. Ae ui i lea, e manaʻomia lava e le database le faitau muamua o faamaumauga nei mai le disk, i le faʻatonuga ua tuʻuina atu (faʻaaliga: faʻapipiʻi faʻavasega pe a faʻamaonia), ona faatoa mafai ai lea ona toe faʻafoʻi faʻamaumauga mai le n+1 agai i luma. O le mea e sili ona manaia o le faʻafitauli e leʻo i le faʻatinoga faʻapitoa i le DBMS, ae i le faʻamatalaga muamua e tusa ai ma le tulaga masani:

…o laina muamua e faavasega e tusa ai ma le ona fa'atapula'aina lea e ala i le tu'u i lalo o le aofa'i o laina fa'amaoti i le mai le amataga…
-SQL: 2016, Vaega 2, 4.15.3 Fa'asolo mai laulau (fa'aaliga: o le taimi nei o le fa'aoga masani)

O le mea autu iinei o le offset e mana'omia se parakalafa se tasi - o le numera o fa'amaumauga e fa'ase'e, ma o le mea lena. I le mulimuli ai i lenei faʻamatalaga, e mafai e le DBMS ona toe aumai uma faʻamaumauga ona lafoai lea o mea e le manaʻomia. E manino lava, o lenei faʻamatalaga o le offset e faʻamalosia ai i tatou e fai galuega faʻaopoopo. Ma e le afaina pe o le SQL poʻo le NoSQL.

Na o sina tiga itiiti lava

O fa'afitauli i le offset e le muta ai iina, ma o le mafua'aga lea. Afai, i le va o le faitauina o itulau e lua o faʻamaumauga mai le disk, o le isi gaioiga e faʻaofiina se faʻamaumauga fou, o le a le mea e tupu i lenei mataupu?

Aisea e te manaʻomia ai meafaigaluega fesoasoani mo le faʻailoga i luga o ki?

A faʻaaoga le offset e faʻamisi faʻamaumauga mai itulau muamua, i le tulaga o le faʻaopoopoina o se faʻamaumauga fou i le va o faitauga o itulau eseese, o le a sili atu ona e maua ni kopi (faʻaaliga: e mafai lenei pe a tatou faitau itulau i itulau e faʻaaoga ai le faʻatonuga e fausia, ona i le totonugalemu o la tatou galuega e mafai ona maua ai se tusi fou).

O loʻo faʻaalia manino e le ata lea tulaga. E faitau e le faavae le 10 faamaumauga muamua, pe a maeʻa ona faʻaofiina se faʻamaumauga fou, lea e faʻafefe uma ai faʻamaumauga faitau e 1. Ona ave lea e le faavae se itulau fou mai le isi 10 faʻamaumauga ma amata e le o le 11th, e pei ona tatau ai, ae mai le 10, fa'aluaina lenei fa'amaumauga. E iai isi fa'aletonu e feso'ota'i ma le fa'aogaina o lenei fa'amatalaga, ae o le mea sili lea ona taatele.

E pei ona uma ona matou iloa, e le o ni faʻafitauli o se DBMS patino poʻo a latou faʻatinoga. O le faʻafitauli o le faʻamalamalamaina o pagination e tusa ai ma le tulaga SQL. Matou te ta'u atu i le DBMS le itulau e aumai pe fia faamaumauga e faamisi. E le mafai e le database ona faʻamalieina sea talosaga, talu ai e laʻititi faʻamatalaga mo lenei mea.

E taua foi le faʻamalamalamaina e le o se faʻafitauli i se upu faʻapitoa, ae o semantics o le fesili. E tele isi syntax e tutusa i lo latou natura faʻafitauli:

  • Ole upu offset e pei ona ta'ua muamua.
  • O le fausiaina o upu autu e lua faatapulaaina [offset] (e ui lava e le leaga tele le faatapulaaina).
  • Fa'amama i tua'oi pito i lalo, fa'atatau ile fa'anumera o laina (fa'ata'ita'iga, row_number(), rownum, etc.).

O nei fa'aaliga uma e na'o le ta'u atu ia te oe pe fia laina e fa'ase'e, leai se fa'amatalaga fa'aopoopo po'o se fa'amatalaga.

Mulimuli ane i lenei tusiga, o le offset keyword e faʻaaogaina e fai ma aotelega o nei filifiliga uma.

Olaga e aunoa ma le OFFSET

Seʻi o tatou mafaufau la po o le a se tulaga e oo i ai lo tatou lalolagi pe a aunoa ma nei faafitauli uma. E foliga mai e le faigata tele le olaga e aunoa ma se faʻasalaga: faʻatasi ai ma se filifiliga, e mafai ona e filifilia naʻo na laina matou te leʻi vaʻaia (faʻaaliga: o lona uiga, o mea e leʻi i ai i luga o le itulau muamua), faʻaaoga se tulaga i le mea.

I lenei tulaga, tatou te amata mai le mea moni o filifiliga o loʻo faʻatinoina i luga o se seti faʻatonu (lelei tuai poloaiga e). Talu ai o loʻo i ai a matou seti faʻatonu, e mafai ona matou faʻaogaina se faamama faigofie e maua ai naʻo faʻamatalaga o loʻo i tua o le faʻamaumauga mulimuli o le itulau muamua:

    SELECT ...
    FROM ...
    WHERE ...
    AND id < ?last_seen_id
    ORDER BY id DESC
    FETCH FIRST 10 ROWS ONLY

O le mataupu faavae atoa lena o lenei faiga. Ioe, e sili atu le malie o mea pe a fa'avasega i le tele o koluma, ae o le manatu e tutusa lava. E taua le maitauina o lenei mamanu e faʻatatau i le tele NoSQL-faaiuga.

O lenei auala e taʻua o le sailia o le auala poʻo le keyset pagination. E foia ai le faʻafitauli o loʻo faʻafefeteina (faʻaaliga: o le tulaga i le tusitusi i le va o itulau faitau faitau faʻamatalaina muamua) ma, o le mea moni, o mea tatou te fiafia uma i ai, e galue vave ma sili atu ona mautu nai lo le faʻasologa masani. O le mautu o loʻo taoto i le mea moni e le faʻateleina le taimi ole talosaga ole faʻatusatusa ile numera ole laulau ole talosaga (faʻaaliga: afai e te manaʻo e aʻoaʻo atili e uiga i le galuega o auala eseese i le pagination, e mafai va'ai i le fa'aaliga a le tusitala. E mafai foʻi ona e mauaina faʻatusatusaga faʻatusatusa mo metotia eseese iina).

O se tasi o fa'ase'e talanoa e uiga i lena meao lena pagination i ki, ioe, e le pule aoao - e i ai ona tapulaa. O le mea pito sili ona taua e le o ia te ia le tomai e faitau ai itulau faʻafuaseʻi (faʻaaliga: le fetaui). Ae ui i lea, i le vaitau o le taʻavale e le gata (faʻaaliga: i le pito i luma), e le o se faʻafitauli. O le faʻamaoniaina o se numera itulau mo le kilikiina o se filifiliga leaga i le UI design (faʻaaliga: manatu o le tusitala o le tusiga).

Ae faapefea meafaigaluega?

E masani ona le talafeagai le fa'aigoaina i luga o ki ona o le leai o se mea faigaluega lagolago mo lenei metotia. O le tele o meafaigaluega fa'atupuina, e aofia ai fa'ava'a eseese, e le fa'atagaina oe e filifili tonu pe fa'afefea ona fa'atinoina le fa'ailoga.

O le tulaga ua faʻateleina i le mea moni o le auala faʻamatalaina e manaʻomia ai le lagolago pito i luga i tekinolosi faʻaaogaina - mai le DBMS i le faʻataunuʻuina o se talosaga AJAX i totonu o le masini ma le taʻavale e le gata. Nai lo le fa'amaoti na'o le numera o le itulau, ua tatau nei ona e fa'amaoti se seti o ki mo itulau uma i le taimi e tasi.

Ae ui i lea, o le numera o faʻavaʻa e lagolagoina le pagination i luga o ki o loʻo faasolosolo malie lava. O mea ia ua tatou maua i le taimi nei:

(Manatua: o nisi o fesoʻotaʻiga na aveesea ona o le mea moni e faapea i le taimi o le faaliliuga o nisi faletusi e leʻi faʻafouina talu mai le 2017-2018. Afai e te fiafia, e mafai ona e vaʻavaʻai i le punavai muamua.)

O le taimi nei e mana'omia ai lau fesoasoani. Afai e te atiina ae pe lagolagoina se faʻavae e faʻaogaina ai le faʻaogaina o le pagination, ona ou fesili atu lea, ou te faʻamalosia, ou te aioi atu ia te oe e tuʻuina atu le lagolago faʻale-aganuʻu mo pagination i luga o ki. Afai ei ai ni au fesili pe manaʻomia se fesoasoani, ou te fiafia e fesoasoani (le fonotaga, Twitter, fomu fa'afeso'ota'i) (faamatalaga: mai loʻu aafiaga ma Marcus, e mafai ona ou fai atu e matua fiafia lava o ia i le faasalalauina o lenei autu).

Afai e te fa'aogaina ni fofo ua saunia e te manatu e agavaa e maua le lagolago mo pagination e ala i ki, fai se talosaga pe ofo atu fo'i se fofo ua saunia, pe a mafai. E mafai fo'i ona e fa'afeso'ota'i i lenei tala.

iʻuga

O le mafuaʻaga e le faʻasalalauina ai se auala faigofie ma aoga e pei o le pagination e ki e le o le faigata ona faʻatinoina faʻapitoa pe manaʻomia soʻo se taumafaiga tele. O le mafuaʻaga autu o le toʻatele e masani ona vaʻai ma galulue faʻatasi - o lenei auala e faʻatonuina e le tulaga lava ia.

O se taunuuga, e toaitiiti tagata e mafaufau e uiga i le suia o le auala i le pagination, ma ona o lenei mea, o loʻo le lelei le atinaʻeina o le lagolago mai faʻavae ma faletusi. O lea la, afai e latalata ia te oe le manatu ma le sini ole offset-free pagination, fesoasoani e faasalalau!

puna: https://use-the-index-luke.com/no-offset
Tusitala: Markus Winand

puna: www.habr.com

Faaopoopo i ai se faamatalaga