sql >> Database >  >> RDS >> PostgreSQL

Cursors met postgres, waar zijn de gegevens opgeslagen en hoeveel aanroepen naar de DB

De dataset voor een cursor wordt voorbereid door de server op het moment van uitvoering van de eerste FETCH. De clienttoepassing ontvangt alleen de resultaten van volgende FETCH-instructies.

Als de server geen indexen kan gebruiken om een ​​cursor te onderhouden, wordt de tijdelijke dataset aangemaakt. U kunt deze eenvoudige test uitvoeren:

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

Voer de instructies in dit script één voor één uit:

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 (*) werkt ongeveer rond dezelfde tijd als het maken van een vergelijkbare tijdelijke tabel:

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

Sommige stuurprogramma's hebben mogelijk hun eigen implementatie van de cursor aan de clientzijde. Dit moet expliciet worden beschreven in de documentatie van de bestuurder.




  1. Hoe weet ik wanneer mijn docker mysql-container actief is en mysql klaar is om vragen te beantwoorden?

  2. Sorteer op meer dan één kolom met mysql

  3. Hoe records met datum van de laatste 10 dagen te vermelden?

  4. SQL Server-afrondingsfout, verschillende waarden geven