ďťż
 
postgres ciekawy problem ďťż
 
postgres ciekawy problem
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 ciekawy problem



Herakles - 11-05-2007 12:32
postgres ciekawy problem
  Witam,

mam dość mocne zapytanie:

select
x2y.*
from
x2y
inner join x on x.x_id=x2y.x_id
inner join y on y.y_id=x2y.y_id
;

i to mi śmiga aż miło, ale musze dodżojnować do tego inną tabelkę "prawie" identyczną z x2y, ale nie zupełnie:

select
x2y.*
from
x2y
inner join x on x.x_id=x2y.x_id
inner join y on y.y_id=x2y.y_id
left join x2y_z on x.xz_id=x2y_z.xz_id and y.yz_id=x2y_z.yz_id
where x2y_z.xz_id is null;

i muli strasznie, rozwiązałem problem w ten sposób:

select
x2y.*,
x.xz_id,
y.yz_id
into temp x2y_joined
from
x2y
inner join x on x.x_id=x2y.x_id
inner join y on y.y_id=x2y.y_id
;

create index x2y_ind on x2y_joined(xz_id,yz_id);

select
x2y_joined.*
from
x2y_joined
left join x2y_z on x2y_joined.xz_id=x2y_z.xz_id and x2y_joined.yz_id=x2y_z.yz_id
where x2y_z.xz_id is null;

i hula, ale chciałbym to rozwiązać elegancko w jednym zapytaniu.
Ma ktoś pomysła?





hubert depesz lubaczewski - 11-05-2007 12:32

  On 2007-05-04, Herakles <herakles@buziaczek.pl> wrote:
> select
> x2y.*
> from
> x2y
> inner join x on x.x_id=x2y.x_id
> inner join y on y.y_id=x2y.y_id
> left join x2y_z on x.xz_id=x2y_z.xz_id and y.yz_id=x2y_z.yz_id
> where x2y_z.xz_id is null;
> i muli strasznie, rozwiązałem problem w ten sposób:

pokaż explain analyze.
i czy na pewno where taki mały? nic więcej nie potrzebujesz
obwarunkować?

depesz

--
quicksil1er: "postgres is excellent, but like any DB it requires a
highly paid DBA. here's my CV!" :)
http://www.depesz.com/ - blog dla ciebie (i moje CV)




Herakles - 11-05-2007 12:32

  hubert depesz lubaczewski wrote:

> On 2007-05-04, Herakles <herakles@buziaczek.pl> wrote:
>> select
>> x2y.*
>> from
>> x2y
>> inner join x on x.x_id=x2y.x_id
>> inner join y on y.y_id=x2y.y_id
>> left join x2y_z on x.xz_id=x2y_z.xz_id and y.yz_id=x2y_z.yz_id
>> where x2y_z.xz_id is null;
>> i muli strasznie, rozwiązałem problem w ten sposób:
>
> pokaż explain analyze.

streszczę, z pierwszych trzech tabel (inner joinów) robi się ładnie, problem
polega na tym, że wynik:
select
x2y.*
from
x2y
inner join x on x.x_id=x2y.x_id
inner join y on y.y_id=x2y.y_id

jest szybki, następnie ten wynik jest joinowany do:
left join x2y_z on x.xz_id=x2y_z.xz_id and y.yz_id=x2y_z.yz_id
bez użycia jakichkolwiek indeksów, po prostu rzeźnia, coś się jeszcze
sortuje etc.

Przygotowanie explaina chwilę mi zajmie, bo tabela x2y_z jest temp i musze
zatrzymać silnik na parę minut, żeby to zrobić, ale za chwilkę wkleję,
także zobacz co wymyślisz be niego.

mam kilka podobnych zapytań, więc rozwiązanie problemu by mi bardzo pomogło.

> i czy na pewno where taki mały? nic więcej nie potrzebujesz
> obwarunkować?
Teoretycznie nie,
są jeszcze dodatkowe warunki:
select
x2y.*
from
x2y
inner join x on x.x_id=x2y.x_id and x.api_id=1
inner join y on y.y_id=x2y.y_id and y.api_id=1

ale nie one są tu problemem.

>
> depesz
>
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • effulla.pev.pl
  • comp
    [MSSQL2000] Problem z =?ISO-8859-2?Q?tabel=B1/indeksem/zapytanie?==?ISO-8859-2?Q?m_czy_b=B3=B1d_w_bazie_danych=2E=2E=2E?= mysql i mysql-front, problem String line; if (line=="cos"){...}....problem [oracle] =?ISO-8859-2?Q?zmia=BFd=BFony_przez_problem=3A_za?==?ISO-8859-2?Q?pytanie_do_hierarchi?= [PostgreSQL] - jak =?ISO-8859-2?Q?zabezpieczy=E6_interesy_tw?==?ISO-8859-2?Q?=F3rcy_systemu_=3F=3F=3F?= postgresql - int/int Problem z wartościami w MySQL :( [ MySQL and ASP and VBScript ] [PGSQL] czy ktos mial problemy z initdb pgsql 8.1 ? [MySQL] Problem z zapisem danych w bazie danych Problem z mysql - can't connect to MySQL/nietypowo...
  • 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