prosba o optymalizacje zapytania (ORACLE)
lll - 13-03-2006 11:25
prosba o optymalizacje zapytania (ORACLE)
Witam, Mam powazny problem z zapytaniem, zwraca wyniki takie jak chce, ale dla np. 2och rekordow czeba czekac ok. 5 min, a jesli sie zawezi zapytanie wpisujac jedno "id" w miejsce "start with t2.ID='1'", to momentalnie zwraca wynik, wiec czemu nie potrafi zwrocic tego szybko przy wstawianiu po koleji id'ow z "tabela1"?
moje zapytanie wyglada tak:
select t.ID, { select SUM(t1.wartosc) --sumuje wartosci z tabeli1 from tabela1 t1,--przechowuje wartosci tabeli2 tabela2 t where t.ID_TABELA1 (+)= t1.ID and t1.ID IN --zwraca id'y "tabela1" (--mysle ze tu gdzies jest blad. --zalezy mi na tym aby w miejscu, --gdzie jest "start with t2.ID=t1.ID" --t1.ID bylo kolejnym ID pochodzacym z --samej gory: t.ID
select t2.ID from tabela2 t2 start with t2.ID = t1.ID connect by t2.ID_PARENT = PRIOR t2.ID ) } }Test from tabela t
Nie wiem czy to zapytanie tak ma wygladac poprawnie, bardzo mi zalezy na tym, aby w miejscu "start with t2.ID = t1.ID <---" t1.ID byly wstawiane wartosci jakie pokolei przyjmuje t.ID. czyli np. t.ID = '1' to w start with t2.ID='1', zwraca wynik, dalej.. t.ID = '2' to w start with t2.ID='2', zwraca wynik, etc.
Strasznie mnie to zapytanie dziwi gdyz takie zapytanie wykonuje sie odrazu:
select t.ID, { select SUM(t1.wartosc) from tabela1 t1,--przechowuje wartosci tabeli2 tabela2 t where t.ID_TABELA1 (+)= t1.ID and t1.ID IN ( select t2.ID from tabela2 t2 start with t2.ID = '1' --TUTAJ connect by t2.ID_PARENT = PRIOR t2.ID ) } }Test from tabela t
Bardzo prosze o pomoc gdyz juz wszystkiego probowalem a zapytanie wciaz bardzo wolno dziala,
Pozdrawiam
=?ISO-8859-2?Q?Micha=B3?= Kuratczyk - 13-03-2006 11:25
lll <seeker10@poczta.onet.pl> wrote: > Mam powazny problem z zapytaniem, zwraca wyniki takie jak chce, ale > dla np. 2och rekordow czeba czekac ok. 5 min, a jesli sie zawezi > zapytanie wpisujac jedno "id" w miejsce "start with t2.ID='1'", to > momentalnie zwraca wynik, wiec czemu nie potrafi zwrocic tego szybko > przy wstawianiu po koleji id'ow z "tabela1"?
Jeśli podzapytanie zawiera warunek "t2.ID = t1.ID", to jest to podzapytanie skorelowane, które musi się wykonywać za każdym razem od nowa. Gdy wstawisz tam '1', to wystarczy wykonać je raz.
Żeby wykombinować lepsze rozwiązanie przyda się: - słowno-muzyczny opis co chcesz osiągnąć tym zapytaniem (ułatwia wymyślenie zupełnie innego rozwiązania) - CREATE TABLE/INDEX..., żeby móc testować - chociaż kilka INSERTów, żeby sprawdzić czy wyniki są takie same - informacje o ilości danych w obu tabelach
-- Michał Kuratczyk
zanotowane.pldoc.pisz.plpdf.pisz.pleffulla.pev.pl
|
Oracle 19g +Insert +Insert +Insert...
[Oracle] jak =?ISO-8859-2?Q?ograniczy=E6_pami=EA=E6_dla_se?==?ISO-8859-2?Q?rwera=3F?=
=?ISO-8859-2?Q?=5BOT=5D_Zdany_egzamin_Oracle_1Z0-007_a?==?ISO-8859-2?Q?_brak_informacji_na_stronie_Prometric_-_czy?==?ISO-8859-2?Q?_co=B6_nie_tak=3F?=
[oracle] czy da =?ISO-8859-2?Q?si=EA_z_poziomu_procedury_?==?ISO-8859-2?Q?zrobi=E6_kopi=EA_zapasow=B1=3F?=
[oracle 10g] czy =?ISO-8859-2?Q?mo=BFna_wy=B3=B1czy=E6_wszys?==?ISO-8859-2?Q?tkie_wi=EAzy_w_schemacie=3F?=
MSSQL Express czy Oracle Express
=?iso-8859-2?q?[oracle]_Jak_sprawdzi=E6_wielko=B6=E6_tabeli_=3F=3F?=
Oracle PL/SQL Wstawianie =?ISO-8859-2?Q?wynik=F3w_kolekcji_d?==?ISO-8859-2?Q?o_tabeli?=
=?iso-8859-2?q?[oracle_10g]_jak_da=E6_grant_do_gv$=2E=2E=2E=2E_=3F?=
[Oracle] 10g wersja =?ISO-8859-2?Q?pe=B3na_i_Express_Editi?==?ISO-8859-2?Q?on?=
zanotowane.pldoc.pisz.plpdf.pisz.plbajkomoda.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 |
|