ďťż
 
=?iso-8859-2?Q?=5BPGSQL=5D_unia_schemat=F3w?= ďťż
 
=?iso-8859-2?Q?=5BPGSQL=5D_unia_schemat=F3w?=
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

=?iso-8859-2?Q?=5BPGSQL=5D_unia_schemat=F3w?=



=?iso-8859-2?Q?Andrzej_Str=F3=BFy=F1ski?= - 29-11-2005 10:11
=?iso-8859-2?Q?=5BPGSQL=5D_unia_schemat=F3w?=
  Witam,
mam dane w kilku schematach (identyczna struktura) i robię zapytania
dotyczące wszystkich schematów (sch1, sch2, ...) :

SELECT a.pole1, b.pole2 FROM sch1.tabela1 a, sch1.tabela2 b WHERE ...
UNION ALL
SELECT a.pole1, b.pole2 FROM sch2.tabela1 a, sch2.tabela2 b WHERE ...
UNION ALL
SELECT a.pole1, b.pole2 FROM sch3.tabela1 a, sch3.tabela2 b WHERE ...

i to działa, ale jak chcę zmienić warunek to mam do zmiany kilka klauzul
WHERE.
Szukałem zatem innego sposobu i zrobiłem tak:

SELECT * FROM
(
SELECT a.pole1, b.pole2 FROM sch1.tabela1 a, sch1.tabela2 b
UNION ALL
SELECT a.pole1, b.pole2 FROM sch2.tabela1 a, sch2.tabela2 b
UNION ALL
SELECT a.pole1, b.pole2 FROM sch3.tabela1 a, sch3.tabela2 b
) as UNIA
WHERE ...

i to też działa, ale kilkukrotnie wolniej niż pierwszy sposób.
Mam więc do wyboru: przejrzystość zapytania, łatwość modyfikacji ale wolne
działanie, albo toporny zapis i szybkie działanie.
Jak pewnie się domyślacie, szukam sposobu żeby połączyć zalety obu wersji i
pozbyć się ich wad :-)
Może ktoś ma doświadczenia z takimi zapytaniami i mógłby mi podsunąć jakiś
pomysł?
Dobrym sposobem (być może) byłoby zdefiniowanie makra zawierającego warunek
i wywoływanie go potem w każdym zapytaniu? Ale czy jest taka możliwość?
Jeśli tak, to jak to ugryźć?

Wiele się już nauczyłem czytając Wasze posty, może i tym razem dowiem się
czegoś ciekawego? ;-)

Pozdrawiam i z góry dziękuję
AS.





Krycek - 29-11-2005 10:11

  Dnia Mon, 28 Nov 2005 16:01:02 +0100, Andrzej Stróżyński
<astrozynski@poczta_dot_onet.pl> napisał:

> Może ktoś ma doświadczenia z takimi zapytaniami i mógłby mi podsunąć
> jakiś pomysł?

Moze widoki?

--
Moim programem pocztowym jest Opera: http://www.opera.com/m2/




=?ISO-8859-2?Q?Pawe=B3_Matejski?= - 29-11-2005 10:11

  Andrzej Stróżyński wrote:
> Witam,

[...]

> mam dane w kilku schematach (identyczna struktura) i robię zapytania
> dotyczące wszystkich schematów (sch1, sch2, ...) :
> i to też działa, ale kilkukrotnie wolniej niż pierwszy sposób.
> Mam więc do wyboru: przejrzystość zapytania, łatwość modyfikacji ale
> wolne działanie, albo toporny zapis i szybkie działanie.
> Jak pewnie się domyślacie, szukam sposobu żeby połączyć zalety obu
> wersji i pozbyć się ich wad :-)
> Może ktoś ma doświadczenia z takimi zapytaniami i mógłby mi podsunąć
> jakiś pomysł?
> Dobrym sposobem (być może) byłoby zdefiniowanie makra zawierającego
> warunek i wywoływanie go potem w każdym zapytaniu? Ale czy jest taka
> możliwość? Jeśli tak, to jak to ugryźć?

To jest dobry sposób ale takie rzeczy są implementowane w bibliotekach po
stronie klienta. Jeśli Twoja bibliotek tego nie umożliwia, to pozostaje Ci
napisać własną procedure, najłatwiej chyba będzie w plperl.

Innych rozwiązań nie znam.

--
P.M.




Robert Grabowski - 29-11-2005 10:11

  Andrzej Stróżyński wrote:
> Witam,
> mam dane w kilku schematach (identyczna struktura) i robię zapytania
> dotyczące wszystkich schematów (sch1, sch2, ...) :
>

1.

> SELECT a.pole1, b.pole2 FROM sch1.tabela1 a, sch1.tabela2 b WHERE ...
> UNION ALL
> SELECT a.pole1, b.pole2 FROM sch2.tabela1 a, sch2.tabela2 b WHERE ...
> UNION ALL
> SELECT a.pole1, b.pole2 FROM sch3.tabela1 a, sch3.tabela2 b WHERE ...
>
> i to działa, ale jak chcę zmienić warunek to mam do zmiany kilka klauzul
> WHERE.
> Szukałem zatem innego sposobu i zrobiłem tak:
>

2.

> SELECT * FROM
> (
> SELECT a.pole1, b.pole2 FROM sch1.tabela1 a, sch1.tabela2 b
> UNION ALL
> SELECT a.pole1, b.pole2 FROM sch2.tabela1 a, sch2.tabela2 b
> UNION ALL
> SELECT a.pole1, b.pole2 FROM sch3.tabela1 a, sch3.tabela2 b
> ) as UNIA
> WHERE ...
>

Powinno działać jednakowo szybko, bo zapytanie 2 jest niejawnie
przepisywane przez PostgreSQL'a na postać 1. Dlaczego u Ciebie się tak
nie dzieje, ciężko na pierwszy rzut oka powiedzieć. Zobacz, co Ci
pokazuje explain, być może nie na wszystkich tabelach masz takie same
indeksy, vacuum analyze wszystkich tabel biorących udział w zapytaniu
może pomoże. Spróbuj te uniony wrzucić do widoku i z niego robić zapytania.

pozdrawiam
Robert Grabowski





Andrzej Stróżyński - 29-11-2005 10:11

 
Użytkownik "Robert Grabowski" <grabba@env.pl> napisał w wiadomości
news:dmfa2p$9b6$1@atlantis.news.tpi.pl...
> Andrzej Stróżyński wrote:
>> Witam,
>> mam dane w kilku schematach (identyczna struktura) i robię zapytania
>> dotyczące wszystkich schematów (sch1, sch2, ...) :
>>
>
> 1.
>
>> SELECT a.pole1, b.pole2 FROM sch1.tabela1 a, sch1.tabela2 b WHERE ...
>> UNION ALL
>> SELECT a.pole1, b.pole2 FROM sch2.tabela1 a, sch2.tabela2 b WHERE ...
>> UNION ALL
>> SELECT a.pole1, b.pole2 FROM sch3.tabela1 a, sch3.tabela2 b WHERE ...
>>
>> i to działa, ale jak chcę zmienić warunek to mam do zmiany kilka klauzul
>> WHERE.
>> Szukałem zatem innego sposobu i zrobiłem tak:
>>
>
> 2.
>
>> SELECT * FROM
>> (
>> SELECT a.pole1, b.pole2 FROM sch1.tabela1 a, sch1.tabela2 b
>> UNION ALL
>> SELECT a.pole1, b.pole2 FROM sch2.tabela1 a, sch2.tabela2 b
>> UNION ALL
>> SELECT a.pole1, b.pole2 FROM sch3.tabela1 a, sch3.tabela2 b
>> ) as UNIA
>> WHERE ...
>>
>
> Powinno działać jednakowo szybko, bo zapytanie 2 jest niejawnie
> przepisywane przez PostgreSQL'a na postać 1. Dlaczego u Ciebie się tak nie
> dzieje, ciężko na pierwszy rzut oka powiedzieć. Zobacz, co Ci pokazuje
> explain, być może nie na wszystkich tabelach masz takie same indeksy,
> vacuum analyze wszystkich tabel biorących udział w zapytaniu może pomoże.
> Spróbuj te uniony wrzucić do widoku i z niego robić zapytania.

Vacuum analyze zrobione, indeksy też te same (to bliźniacze schematy
generowane przez jedną aplikację).
Mnie też wydawało się, że obie wersje powinny działać podobnie ale SQL-em
zajmuję się od niecałych dwóch miesięcy więc moje "czucie materii" nie jest
zbyt duże.
W explain nie zaglądałem i widoków też jeszcze nie próbowałem. Kolega Paweł
proponuje procedurę...
Cóż, widzę, że pora na nowe doświadczenia :-). Z pewnością będę drążył temat
a jak uda mi się to połączenie to opowiem jak.

dziękuję za pomoc
AS




Robert Grabowski - 29-11-2005 10:12

  Andrzej Stróżyński wrote:
[...]

> dziękuję za pomoc
> AS
>
>

Napisz jeszcze, której wersji bazy używasz.

pozdrawiam
Robert Grabowski




=?iso-8859-2?Q?Andrzej_Str=F3=BFy=F1ski?= - 29-11-2005 10:12
=?iso-8859-2?Q?Re:_=5BPGSQL=5D_unia_schemat=F3w?=
  > [...]
>
> Napisz jeszcze, której wersji bazy używasz.

PostgreSQL 7.4.6 na fedor'ze 64 bit
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • effulla.pev.pl
  • comp
    Wydajność baz danych w zależności od poziomu izolacji ANSI/ISO Czy zna (obsługuje) ktoś program Iso Draw ? MYSQL - kodowanie w ISO-PL strona plus baza w iso do utf-8 Kodowanie: z iso na utf Konwesja znaków w dump'ie bazy danych - ISO -> utf-8 -> ISO -> utf-8 =?iso-8859-2?q?Co_oznacza_b=B3=B1d_Warning:_mysql=5Fconnect() _[function.mysql-connect]:_Can't_connect_to_local_MySQL_server_through_sock et_'/var/run/mysqld/mysqld.sock'_(2)_in?= =?iso-8859-2?q?Informatyka,_Java,_EJB,_Ajax,_Spring=2E_Czy=BF by_to_koniec_=B6wiata,_czy_te=BF_nasze_uczelnie_b= EAd=B1_uczy=B3y_w_ko=F1cu!_czego_praktycznego_=2E= 2E=2E=2E?= =?iso-8859-2?q?Ati_Mobility_Radeon_X300_W_Notebooku_Jak_Zwi=E Akszy=E6_Ilo=B6=E6_Grafiki_Poprzez_Wsp=F3=B3dziele nie_Z_Ramu=3F=3F=3F?= =?ISO-8859-2?Q?=AFegnam_si=EA=2E=2E=2E?=
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • oefg.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