sql >> Database teknologi >  >> RDS >> PostgreSQL

Markører med postgres, hvor er dataene gemt og hvor mange opkald til DB'en

Datasættet for en markør forberedes af serveren på tidspunktet for udførelse af den første FETCH. Klientapplikationen modtager kun resultaterne af efterfølgende FETCH-udsagn.

Hvis serveren ikke kan bruge indekser til at vedligeholde en markør, oprettes det midlertidige datasæt. Du kan udføre denne simple test:

create table test(i int, v text);
insert into test
select i, i::text
from generate_series(1, 5000000) i;

Udfør sætningerne i dette script én efter én:

begin;

declare cur cursor 
for select * from test
order by random();             -- 17 ms

fetch next cur;                -- 37294 ms (*)

fetch next cur;                -- 0 ms
fetch prior cur;               -- 0 ms
fetch absolute 1000000 cur;    -- 181 ms
fetch relative 1000000 cur;    -- 163 ms
fetch first cur;               -- 0 ms
fetch last cur;                -- 0 ms

rollback;

First FETCH (*) udfører nogenlunde samme tid som oprettelsen af ​​en lignende midlertidig tabel:

create temp table temp_test as
select * from test
order by random();             -- 51684 ms

Nogle drivere kan have deres egen implementering af markøren på klientsiden. Dette bør udtrykkeligt beskrives i førerens dokumentation.




  1. SQL-operatører

  2. Hvordan henter man kategorier og underkategorier i en enkelt forespørgsel i sql? (mysql)

  3. Hvilken SQL-forespørgsel er bedre, MATCH MOD eller LIKE?

  4. Sådan indstilles det aktuelle sprog i SQL Server (T-SQL)