Hi all,
May be I completely wrong but I always assumed that the access speed to the array element in PostgreSQL should be close to constant time.
But in tests I found that access speed degrade as O(N) of array size.
Test case (performed on large not busy server with 1GB work_mem to ensure I working with memory only):
WITH
t AS (SELECT ARRAY(SELECT * FROM generate_series(1,N)) AS _array)
SELECT count((SELECT _array[i] FROM t)) FROM generate_series(1,10000) as g(i);
Results for N between 1 and 10.000.000 (used locally connected psql with \timing):
N: Time:1 5.8ms10 5.8ms100 5.8ms1000 6.7ms--until there all reasonable5k 21ms10k 34ms50k 177ms100k 321ms500k 4100ms 1M 8100ms2M 22000ms5M 61000ms10M 220000ms = 22ms to sinlge array element access.
Is that behaviour is correct?
PS: what I actually lookin for - constant fast access by position tuplestore for use with recursive queries and/or pl/pgsql, but without using C programming.
--
Maxim Boguk
Senior Postgresql DBA.
Phone RU: +7 910 405 4718
Phone AU: +61 45 218 5678
Skype: maxim.boguk
Jabber:
maxim.boguk@gmail.com МойКруг:
http://mboguk.moikrug.ru/"People problems are solved with people.
If people cannot solve the problem, try technology.
People will then wish they'd listened at the first stage."