Dlaczego moj kursor pod Postgres dziala tak wolno.
Szymic1 - 21-06-2006 00:10
Dlaczego moj kursor pod Postgres dziala tak wolno.
Witam mam nastepujacy problem mam tabele:
CREATE OR REPLACE FUNCTION alias( v_mask alias.mask%TYPE, ) RETURNS INT8 AS
z indeksem
CREATE INDEX alias_mask_ind ON alias(mask);
tabela ma okolo tysiaca wierszy. Teraz zapuszczam taka procedure:
LOOP <........> OPEN cursor1 FOR SELECT * FROM alias WHERE mask>=alias_out ORDER BY mask; i:=0; LOOP i:=i+1; FETCH cursor1 INTO alias_row; EXIT WHEN i=10; END LOOP; CLOSE cursor1; EXIT WHEN end_number=10000; END LOOP;
No i niestety otwarcie kursora i zczytanie jest bardzo wolne ale jesli dodam np.LIMIT 100 procedura dziala bardzo szybko. OPEN cursor1 FOR SELECT * FROM alias WHERE mask>=alias_out ORDER BY mask LIMIT 100;
Takie dzialanie jest bardzo dziwne dla mnie poniewaz z zalozenia kursor powinien dzialac tak ze ustawia sie na pierwsza wartosc i dociaga nastepna wartosc jak jest FETCH a z mojego doswiadczenia wynika ze tak nie jest.
Czy ktos ma pomysl co robie zle albo jak zrobic zeby select bez limit dzialal szybko?
Michal
Szymic1 - 21-06-2006 00:10
Sory tabla jest zdefiniowana:
CREATE TABLE alias ( alias_id BIGSERIAL PRIMARY KEY, mask VARCHAR(20) NOT NULL DEFAULT '',
);
Przez pomylke co innego wkleilem :)
hubert depesz lubaczewski - 21-06-2006 00:11
On 2006-06-20, Szymic1 <dyrex@poczta.onet.pl> wrote: > LOOP > <........> > OPEN cursor1 FOR SELECT * FROM alias WHERE mask>=alias_out > ORDER BY mask;
dopisz do otwierania tego kursora: FOR READ ONLY.
a poza tym - jest jakiś konkretny powód dla którego nie używasz po prostu limitów? kursory w postgresie są, ale ich uzywanie to zazwyczaj przykład przenoszenia nawyków z innych baz niż celowego i przemyślanego działania.
depesz
-- http://www.depesz.com/ - nowy, lepszy depesz
hubert depesz lubaczewski - 21-06-2006 00:11
On 2006-06-20, Szymic1 <dyrex@poczta.onet.pl> wrote: > OPEN cursor1 FOR SELECT * FROM alias WHERE mask>=alias_out
sorry. nie for read only tylko "NO SCROLL". for read only nie zaszkodzi, ale głównie chodzi o no scroll
depesz
-- http://www.depesz.com/ - nowy, lepszy depesz
zanotowane.pldoc.pisz.plpdf.pisz.pleffulla.pev.pl
|
[PostgreSQL] - jak =?ISO-8859-2?Q?zabezpieczy=E6_interesy_tw?==?ISO-8859-2?Q?=F3rcy_systemu_=3F=3F=3F?=
postgresql - int/int
postgresql Select count(*) czy raczej Select count(ID)
[PostgreSQL] jak =?ISO-8859-2?Q?pobra=E6_warto=B6=E6_zwracan?==?ISO-8859-2?Q?=B1_przez_funkcj=EA=3F?=
[postgresql] INSERT OR UPDATE - jak =?ISO-8859-2?Q?b=EAdzie_na?==?ISO-8859-2?Q?jlepiej=3F?=
[postgresql] kilka =?ISO-8859-2?Q?rekord=F3w_subquery_jako_?==?ISO-8859-2?Q?string?=
[PostgreSQL] Jak =?ISO-8859-2?Q?po=B3=B1czy=E6_funkcje_z_w?==?ISO-8859-2?Q?idokiem?=
Postgres - replikcja master-master
Dopasowanie do "najlepszego" dopasowania :) [ PostgreSQL]
Problemy z =?ISO-8859-2?Q?instalacj=B1_PostgreSQL_na_syste?==?ISO-8859-2?Q?mach_Windows?=
zanotowane.pldoc.pisz.plpdf.pisz.plnawschodzie.xlx.pl
Cytat
Decede mihi sole - nie zasłaniaj mi słonca. Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści Hoc fac - tak czyń. A tergo - od tyłu; z tyłu. I czarne włosy posiwieją. Safona |
|