ďťż
 
[Postgres] Zbyt wolny select ďťż
 
[Postgres] Zbyt wolny select
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] Zbyt wolny select



marek rynkowski - 13-11-2006 00:45
[Postgres] Zbyt wolny select
  Zdefiniowałem tabelę o nazwie "tabela". W tabeli tej oprócz dużej ilości
pól znajduje się również pole o nazwie "binary_counter". Jest to pole
bitowe typu "bit(1024)".

Zdefiniowałem również tabelę o nazwie "uzytkownicy", w której trzymam
loginy użytkowników w kolumnie o nazwie "login_uzytkownika". W tabeli
tej mam również pole o nazwie "binary_mask", które jest typu bitowego
"bit(1024)". Taka maska bitowa użytkownika.

Na koniec zdefiniowałem funkcję o nazwie "binary_mask", która na
podstawie loginu użytkownika zwraca z tabeli "uzytkownicy" jego maskę
bitową. Oto kod funkcji:

create or replace function binary_mask(name) returns bit as '
select binary_mask
from uzytkownicy
where login_uzytkownika = $1;
' language sql;

Teraz jeśli wykonuję zapytanie na tabeli o nazwie "tabela"

SELECT *
FROM tabela
WHERE binary_counter & binary_mask(current_user) = binary_counter

i już dla około 1000 rekordów wyknuje się ono kilkanaście sekund :O(

Czy jest możliwość zbudowania jakiegoś typu indeksu aby przyspieszyć to
zapytanie?

marek





Michał 'Khorne' Rzechonek - 13-11-2006 00:45

  marek rynkowski wrote:
> create or replace function binary_mask(name) returns bit as '
> select binary_mask
> from uzytkownicy
> where login_uzytkownika = $1;
> ' language sql;
>
> Teraz jeśli wykonuję zapytanie na tabeli o nazwie "tabela"
>
> SELECT *
> FROM tabela
> WHERE binary_counter & binary_mask(current_user) = binary_counter

A czemu nie tak:

SELECT * FROM tabela t, uzytkownicy u
WHERE u.login_uzytkownika = t.current_user AND t.binary_counter &
u.binary_mask = t.binary_counter

--
Michał 'Khorne' Rzechonek




Artur Muszynski - 13-11-2006 00:45

  marek rynkowski wrote:
> SELECT *
> FROM tabela
> WHERE binary_counter & binary_mask(current_user) = binary_counter
> Czy jest możliwość zbudowania jakiegoś typu indeksu aby przyspieszyć
> to zapytanie?

Już się o to pytałeś kilka dni temu.

artur




Michal Jankowski - 13-11-2006 00:45

  marek rynkowski <marekrynkowski@hotmail.com> writes:

> create or replace function binary_mask(name) returns bit as '
> select binary_mask
> from uzytkownicy
> where login_uzytkownika = $1;
> ' language sql;

Dodaj atrybut STABLE.

MJ





marek rynkowski - 13-11-2006 00:46

  Artur Muszynski napisał(a):
> Już się o to pytałeś kilka dni temu.
>
> artur

Tak wiem. Pomyślałem, że zbyt skrótowo napisałem bo nikt mi nie
odpowiedział :O( Więc dokładnie opsiałem mój problem.

marek
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • effulla.pev.pl
  • comp
    [PostgreSQL] - jak =?ISO-8859-2?Q?zabezpieczy=E6_interesy_tw?==?ISO-8859-2?Q?=F3rcy_systemu_=3F=3F=3F?= postgresql - int/int [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?= =?ISO-8859-2?Q?[psql]_Polskie_t=B3umaczenie_?= =?ISO-8859-2?Q?licencji_BSD_dla_PostgreSQL=3F?=
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • ptsite.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

    Valid HTML 4.01 Transitional

    Free website template provided by freeweblooks.com