ďťż
 
postgres - ile razy wykona =?ISO-8859-2?Q?si=EA_funkcja_w_?==?ISO-8859-2?Q?zapytaniu?= ďťż
 
postgres - ile razy wykona =?ISO-8859-2?Q?si=EA_funkcja_w_?==?ISO-8859-2?Q?zapytaniu?=
Zobacz wiadomości
 
Cytat
A gdyby tak się wedrzeć na umysłów górę, / Gdyby stanąć na ludzkich myśli piramidzie, / I przebić czołem przesądów chmurę, / I być najwyższą myślą wcieloną. . . Juliusz Słowacki, Kordian
Indeks BCB i MySQL subiekt gt fototapeta
 
  Witamy

postgres - ile razy wykona =?ISO-8859-2?Q?si=EA_funkcja_w_?==?ISO-8859-2?Q?zapytaniu?=



Mac - 13-02-2006 10:32
postgres - ile razy wykona =?ISO-8859-2?Q?si=EA_funkcja_w_?==?ISO-8859-2?Q?zapytaniu?=
  Witam,

Mam pytanie dotyczące postgresql. Napisałem funkcję w C i podłączyłem do
Postgresa za pomocą CREATE FUNCTION - nazwijmy tą funkcję X(text), która
zwraca integer. Czy w zapytaniu np.:

SELECT name, X(name) FROM tabela WHERE X(name) > 50;

funkcja X() zostanie obliczona raz czy dwa razy?

Jeśli będzie obliczana dwa razy, to w jaki sposób można sprawić, żeby
była obliczana tylko raz? Funkcja jest dosyć czasochłonna, a zależy mi
na tym, żeby całość działała jak najszybciej.

Pozdrawiam

Maciej





Marek Malczewski - 13-02-2006 10:32

  Mac wrote:

> Witam,
>
> Mam pytanie dotyczące postgresql. Napisałem funkcję w C i podłączyłem do
> Postgresa za pomocą CREATE FUNCTION - nazwijmy tą funkcję X(text), która
> zwraca integer. Czy w zapytaniu np.:
>
> SELECT name, X(name) FROM tabela WHERE X(name) > 50;
>
> funkcja X() zostanie obliczona raz czy dwa razy?
>
> Jeśli będzie obliczana dwa razy, to w jaki sposób można sprawić, żeby
> była obliczana tylko raz? Funkcja jest dosyć czasochłonna, a zależy mi
> na tym, żeby całość działała jak najszybciej.
>
> Pozdrawiam
>
> Maciej

Wszystko wskazuje na to ze zostanie wykonana dwukrotnie dla kazdego
zwracanego rekordu. Podzapytanie tez zdaje sie nie ratowac sytuacji. Latwo
to sprawdzic piszac sobie procedurke, ktora otrzymuje takie same parametry
i przy kazdym uruchomieniu zapisuje cos do jakiejs tabeli.

Pokombinuj z tabelami tymczasowymi.




Andrzej Stróżyński - 13-02-2006 10:32

 
Użytkownik "Marek Malczewski" <marek_malczewski_WYTNIJ_TO_@wp.pl> napisał w
wiadomości news:dso410$9fh$1@kujawiak.man.lodz.pl...
> Mac wrote:
>
>> Witam,
>>
>> Mam pytanie dotyczące postgresql. Napisałem funkcję w C i podłączyłem do
>> Postgresa za pomocą CREATE FUNCTION - nazwijmy tą funkcję X(text), która
>> zwraca integer. Czy w zapytaniu np.:
>>
>> SELECT name, X(name) FROM tabela WHERE X(name) > 50;
>>
>> funkcja X() zostanie obliczona raz czy dwa razy?
>>
>> Jeśli będzie obliczana dwa razy, to w jaki sposób można sprawić, żeby
>> była obliczana tylko raz? Funkcja jest dosyć czasochłonna, a zależy mi
>> na tym, żeby całość działała jak najszybciej.
>>
>> Pozdrawiam
>>
>> Maciej
>
> Wszystko wskazuje na to ze zostanie wykonana dwukrotnie dla kazdego
> zwracanego rekordu. Podzapytanie tez zdaje sie nie ratowac sytuacji. Latwo
> to sprawdzic piszac sobie procedurke, ktora otrzymuje takie same parametry
> i przy kazdym uruchomieniu zapisuje cos do jakiejs tabeli.
>
> Pokombinuj z tabelami tymczasowymi.

spróbuj tak:
SELECT * FROM (
SELECT name, X(name) AS x_name FROM tabela
) as sub
WHERE x_name > 50;

A.S.




Mac - 13-02-2006 10:32

  >>>
>>>SELECT name, X(name) FROM tabela WHERE X(name) > 50;

>
> spróbuj tak:
> SELECT * FROM (
> SELECT name, X(name) AS x_name FROM tabela
> ) as sub
> WHERE x_name > 50;
>

Dzięki, faktycznie działa. O coś takiego właśnie mi chodziło.

Napisałem testową funkcję, która czeka 5 sekund. Dla pierwszego
przypadku (mojego) wykonuje się nieco ponad 10 sek, dla Twojego
natomiast 5 sek.

Pozdrawiam

Maciej





=?ISO-8859-2?Q?Pawe=B3_Matejski?= - 13-02-2006 10:32

  Mac wrote:
> Witam,
>
> Mam pytanie dotyczące postgresql. Napisałem funkcję w C i podłączyłem do
> Postgresa za pomocą CREATE FUNCTION - nazwijmy tą funkcję X(text), która
> zwraca integer. Czy w zapytaniu np.:
>
> SELECT name, X(name) FROM tabela WHERE X(name) > 50;
>
> funkcja X() zostanie obliczona raz czy dwa razy?
>
> Jeśli będzie obliczana dwa razy, to w jaki sposób można sprawić, żeby
> była obliczana tylko raz? Funkcja jest dosyć czasochłonna, a zależy mi
> na tym, żeby całość działała jak najszybciej.

Zadeklaruj ją STABLE albo IMMUTABLE, w zależności od tego jakie warunki spełnia.
Z tego co piszesz wynika, że nie jest VOLATILE, a ta wartość jest domyślnie
przyjmowana. Dzięki tem pozwolisz postgresowi zoptymalizować wywołania funkcji.

--
P.M.
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • effulla.pev.pl
  • comp
    postgresql - int/int postgresql Select count(*) czy raczej Select count(ID) mecze sie i mecze i nic - zapytanie czesciowe [sql][pgsql] zapytanie sql Postgres - replikcja master-master Dopasowanie do "najlepszego" dopasowania :) [ PostgreSQL] [mysql 4.0] SELECT t1.id, t1.foo FROM t1 oraz COUNT t2 w jednym zapytaniu. [MySQL] Zapytanie z pliku , wynik do pliku pytanie o zapytanie z having count = count z innej kolumny Jedno zapytanie różne wyniki w polu data [mysql i mysql+php]
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • red-hacjenda.opx.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

    Valid HTML 4.01 Transitional

    Free website template provided by freeweblooks.com