Tsis txhob siv OFFSET thiab LIMIT hauv cov lus nug paginated

ploj mus yog hnub thaum koj tsis tas yuav txhawj xeeb txog kev ua kom zoo dua cov ntaub ntawv. Lub sij hawm tsis nyob twj ywm. Txhua tus neeg ua lag luam thev naus laus zis tshiab xav tsim Facebook tom ntej, thaum sim sau tag nrho cov ntaub ntawv lawv tuaj yeem tau txais lawv txhais tes. Cov lag luam xav tau cov ntaub ntawv no los qhia cov qauv zoo dua uas pab lawv kom tau nyiaj. Hauv cov xwm txheej zoo li no, cov programmers yuav tsum tsim cov APIs uas tso cai rau lawv ua haujlwm sai thiab ntseeg siab nrog cov ntaub ntawv loj.

Tsis txhob siv OFFSET thiab LIMIT hauv cov lus nug paginated

Yog tias koj tau tsim daim ntawv thov lossis cov ntaub ntawv rov qab rau lub sijhawm ntev, koj tau zaum sau cov lej los khiav cov lus nug paginated. Piv txwv li, zoo li no:

SELECT * FROM table_name LIMIT 10 OFFSET 40

Txoj kev nws yog?

Tab sis yog tias qhov no yog li cas koj tau ua koj cov pagination, kuv thov txim hais tias koj tsis tau ua nws txoj hauv kev zoo tshaj plaws.

Koj puas xav tawm tsam kuv? Koj tuaj yeem ua tau tsis siv lub sijhawm. slack, Khw Tshaj Tawm ΠΈ Mixmax Lawv twb siv cov tswv yim uas kuv xav tham txog niaj hnub no.

Sau npe tsawg kawg yog ib tus neeg tsim tawm backend uas tsis tau siv OFFSET ΠΈ LIMIT ua paginated queries. Hauv MVP (Cov Khoom Siv Tau Tsawg Tsawg) thiab hauv cov haujlwm uas siv cov ntaub ntawv me me, txoj hauv kev no siv tau heev. Nws "tsuas yog ua haujlwm," yog li hais.

Tab sis yog tias koj yuav tsum tsim kom muaj kev txhim khu kev qha thiab ua haujlwm tau zoo los ntawm kos, koj yuav tsum tau saib xyuas ua ntej txog kev ua haujlwm ntawm kev nug cov ntaub ntawv siv hauv cov tshuab zoo li no.

Niaj hnub no peb yuav tham txog cov teeb meem uas feem ntau siv (tsis zoo heev) kev siv ntawm paginated query engines, thiab yuav ua li cas ua tau zoo thaum ua cov lus nug.

Dab tsi yog OFFSET thiab LIMIT?

Raws li twb tau hais lawm, OFFSET ΠΈ LIMIT Lawv ua tau zoo hauv cov haujlwm uas tsis tas yuav ua haujlwm nrog cov ntaub ntawv loj.

Qhov teeb meem tshwm sim thaum cov ntaub ntawv loj hlob mus rau qhov loj me uas nws tsis haum rau hauv cov neeg rau zaub mov nco. Txawm li cas los xij, thaum ua haujlwm nrog cov ntaub ntawv no, koj yuav tsum siv cov lus nug paginated.

Rau qhov teeb meem no kom tshwm sim nws tus kheej, yuav tsum muaj qhov xwm txheej uas DBMS tau ua haujlwm rau qhov ua haujlwm tsis zoo Tag Nrho Lub Sijhawm Scan ntawm txhua cov lus nug paginated (thaum kev ntxig thiab tshem tawm cov haujlwm yuav tshwm sim, thiab peb tsis xav tau cov ntaub ntawv dhau los!).

Dab tsi yog "tag nrho cov lus scan" (lossis "sequential table scan", Sequential Scan)? Qhov no yog ib qho kev ua haujlwm thaum lub sijhawm DBMS nyeem txhua kab ntawm lub rooj, uas yog, cov ntaub ntawv muaj nyob hauv nws, thiab tshuaj xyuas lawv kom ua raws li cov xwm txheej muab. Hom rooj scan no paub tias yog qhov qeeb tshaj plaws. Qhov tseeb yog tias thaum nws raug tua, ntau qhov kev tawm tswv yim / tso tawm tau ua haujlwm uas cuam tshuam nrog lub server lub disk subsystem. Qhov xwm txheej no tshwm sim los ntawm kev ncua sij hawm cuam tshuam nrog kev ua haujlwm nrog cov ntaub ntawv khaws cia rau hauv disks, thiab qhov tseeb tias kev hloov cov ntaub ntawv los ntawm disk mus rau lub cim xeeb yog kev ua haujlwm hnyav.

Piv txwv li, koj muaj cov ntaub ntawv ntawm 100000000 cov neeg siv thiab koj khiav cov lus nug nrog kev tsim OFFSET 50000000. Qhov no txhais tau hais tias DBMS yuav tsum thauj tag nrho cov ntaub ntawv no (thiab peb tsis xav tau lawv!), muab tso rau hauv nco, thiab tom qab ntawd coj, hais, 20 cov txiaj ntsig tau tshaj tawm hauv LIMIT.

Cia peb hais tias nws yuav zoo li no: "xaiv kab ntawm 50000 txog 50020 ntawm 100000". Ntawd yog, lub kaw lus yuav tsum xub thauj khoom 50000 kab kom tiav cov lus nug. Koj puas pom ntau npaum li cas nws yuav tsum tau ua?

Yog tias koj tsis ntseeg kuv, ua tib zoo saib cov piv txwv uas kuv tsim siv cov yam ntxwv db-fiddle.com ua

Tsis txhob siv OFFSET thiab LIMIT hauv cov lus nug paginated
Piv txwv ntawm db-fiddle.com

Nyob ntawd, sab laug, hauv teb Schema SQL, muaj cov lej uas ntxig 100000 kab rau hauv cov ntaub ntawv, thiab ntawm sab xis, hauv daim teb Query SQL, ob nqe lus nug tau qhia. Thawj, qeeb ib, zoo li no:

SELECT *
FROM `docs`
LIMIT 10 OFFSET 85000;

Thiab qhov thib ob, uas yog ib qho kev daws teeb meem zoo rau tib qho teeb meem, zoo li no:

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

Txhawm rau ua kom tiav cov kev thov no, tsuas yog nyem rau ntawm lub pob Run nyob rau sab saum toj ntawm nplooj ntawv. Tom qab ua qhov no, peb sib piv cov ntaub ntawv hais txog cov lus nug ua tiav lub sijhawm. Nws hloov tawm tias ua tiav cov lus nug tsis muaj txiaj ntsig yuav siv sijhawm tsawg kawg 30 lub sijhawm ntev dua li ua qhov thib ob (lub sijhawm no txawv ntawm kev khiav mus rau kev khiav; piv txwv li, lub kaw lus yuav tshaj tawm tias thawj cov lus nug tau siv 37 ms los ua kom tiav, tab sis kev ua tiav ntawm qhov kev ua haujlwm. thib ob - 1 ms).

Thiab yog tias muaj cov ntaub ntawv ntxiv, ces txhua yam yuav zoo dua (kom ntseeg tau qhov no, saib kuv Piv txwv nrog 10 lab kab).

Qhov peb nyuam qhuav tham yuav tsum muab qee qhov kev nkag siab rau koj li cas cov lus nug database tau ua tiav.

Thov nco ntsoov tias tus nqi siab dua OFFSET - ntev dua qhov kev thov yuav ua kom tiav.

Kuv yuav siv dab tsi los ntawm kev sib xyaw ntawm OFFSET thiab LIMIT?

Es tsis txhob ua ke OFFSET ΠΈ LIMIT Nws tsim nyog siv cov qauv tsim raws li cov qauv hauv qab no:

SELECT * FROM table_name WHERE id > 10 LIMIT 20

Qhov no yog cov lus nug ua tiav nrog tus cursor raws pagination.

Tsis txhob khaws cov tam sim no hauv zos OFFSET ΠΈ LIMIT thiab xa lawv nrog txhua qhov kev thov, koj yuav tsum khaws qhov kawg tau txais thawj tus yuam sij (feem ntau yog qhov no ID) thiab LIMIT, yog li ntawd, cov lus nug zoo ib yam li cov saum toj no yuav tau txais.

Vim li cas? Lub ntsiab lus yog tias los ntawm kev qhia meej meej tus cim ntawm kab kawg nyeem, koj qhia koj DBMS qhov twg nws yuav tsum pib tshawb nrhiav cov ntaub ntawv tsim nyog. Tsis tas li ntawd, kev tshawb nrhiav, ua tsaug rau kev siv tus yuam sij, yuav ua tau zoo; lub kaw lus yuav tsis tas yuav cuam tshuam los ntawm kab sab nraud ntawm qhov teev tseg.

Cia peb saib hauv qab no kev sib piv ntawm ntau yam lus nug. Ntawm no yog cov lus nug tsis muaj txiaj ntsig.

Tsis txhob siv OFFSET thiab LIMIT hauv cov lus nug paginated
Kev thov qeeb

Thiab ntawm no yog qhov optimized version ntawm qhov kev thov no.

Tsis txhob siv OFFSET thiab LIMIT hauv cov lus nug paginated
Thov ceev

Ob qho lus nug rov qab raws nraim tib yam ntawm cov ntaub ntawv. Tab sis thawj tus yuav siv sijhawm 12,80 vib nas this kom tiav, thiab qhov thib ob siv 0,01 vib nas this. Koj puas xav tias qhov txawv?

Tej teeb meem tshwm sim

Rau txoj kev xav nug kom ua haujlwm tau zoo, lub rooj yuav tsum muaj ib kem (lossis txhua kab) uas muaj cov cim tshwj xeeb, ua ntu zus, xws li tus lej lej. Hauv qee qhov tshwj xeeb, qhov no tuaj yeem txiav txim siab qhov ua tiav ntawm kev siv cov lus nug no txhawm rau ua kom nrawm ntawm kev ua haujlwm nrog cov ntaub ntawv.

Lawm, thaum tsim cov lus nug, koj yuav tsum coj mus rau hauv tus account qhov tshwj xeeb architecture ntawm cov ntxhuav thiab xaiv cov txheej txheem uas yuav ua haujlwm zoo tshaj plaws ntawm cov ntxhuav uas twb muaj lawm. Piv txwv li, yog tias koj xav tau ua haujlwm hauv cov lus nug nrog ntau cov ntaub ntawv ntsig txog, koj tuaj yeem pom nws nthuav qhov no tsab xov xwm.

Yog tias peb tab tom ntsib teeb meem ntawm qhov ploj ntawm qhov tseem ceeb, piv txwv li, yog tias peb muaj lub rooj nrog ntau-rau-ntau txoj kev sib raug zoo, ces cov kev cai ntawm kev siv. OFFSET ΠΈ LIMIT, yog guaranteed haum rau peb. Tab sis nws siv yuav ua rau cov lus nug qeeb. Hauv cov xwm txheej zoo li no, kuv xav kom siv qhov pib nce qhov tseem ceeb, txawm tias nws tsuas yog xav tau los daws cov lus nug paginated.

Yog tias koj txaus siab rau lub ncauj lus no - ntawm no, ntawm no ΠΈ ntawm no - ob peb yam khoom siv.

Cov txiaj ntsim tau los

Lub ntsiab lus xaus uas peb tuaj yeem kos tau yog tias, txawm tias qhov loj npaum li cas ntawm cov ntaub ntawv peb tab tom tham txog, nws yog ib txwm tsim nyog los tshuaj xyuas qhov nrawm ntawm kev nug ua tiav. Niaj hnub no, kev ua kom muaj peev xwm ntawm cov kev daws teeb meem yog qhov tseem ceeb heev, thiab yog tias txhua yam tsim nyog los ntawm kev pib ua haujlwm ntawm qee qhov system, qhov no, yav tom ntej, tuaj yeem cawm tus tsim tawm los ntawm ntau yam teeb meem.

Yuav ua li cas koj txheeb xyuas thiab optimize database queries?

Tsis txhob siv OFFSET thiab LIMIT hauv cov lus nug paginated

Tau qhov twg los: www.hab.com

Ntxiv ib saib