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.pldoc.pisz.plpdf.pisz.pleffulla.pev.pl
|
[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.pldoc.pisz.plpdf.pisz.plred-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 |
|