Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem [MySQL] Hodnota

:-) Nemá a bude mít. Snad víš "od" které stránky - máš k dispozici hinty a "target" - všechny řádky (podle velikosti ale dejmetomu fullscan pro celou tabulku) a hint ALL_ROWS a nebo (ty první tak rychle jak je to možné ASAP a podle indexu) a hint FIRST_ROWS a pak nějaké fetchování kolik vlastně záznamu chceš.

select * from tabulka order by sloupec_a; // seřadí všechny záznamy a vrátí až to bude celé hotové
select /*+ FIRST_ROWS */ from tabulka order by sloupec_a; // vyhodí asap seřazené řádky z indexu a bleje výsledek hned jak ho má. a ty si pak fetchnes kolik chces a zbytek uz po nem neches.

FIRST_ROWS -- psat nemusis, muze to byt na urovni session, ci databáz napsané, ze je to interaktivni aplikace a ze pozadujes vracet radky jak nejrychleji je to mozne. By default je to ALL_ROWS - pozadujes vsechny radky a je ti jedno kdy je dostanes, chces maximalni propustnost, to je optimalizační target pro oracle - pro warhouses a batche. Drive existoval FIRST_ROWS(n), kde n je poct radku, ktere chces optimalizovat pro interaktvni fetchovani, zbytek byl pro batch.

To bylo z pohledu nejakeho rozumneho behu, jinak limit taky zvládám:

select ((select * from tabulka order by x) where rownum<100
minus
select ((select * from tabulka order by x) where rownum<90
tohle udělá select * from tabulka order by x limit 90,100

Zalezi na indexu, velikosti a co o tom vis. Odectem mnozin co jsem ukázal to taky zvládneš. Obecně si to muzes vynutit (nevim jak interně dělá LIMIT mysql) stejně jako to dělá mysql, tech moznosti jak dosáhnout výsledku LIMIT 90,100.

Reakce na odpověď

1 Zadajte svou přezdívku:
2 Napište svou odpověď:
3 Pokud chcete dostat ban, zadejte libovolný text:

Zpět do poradny