🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.bazy-danych
Article #183303

Re: Optymalizacja zapytania

#183303
From: Krzysztof Jamróz
Date: Mon, 13 Jul 2009 20:15
68 lines
3814 bytes
Dnia Thu, 9 Jul 2009 05:31:23 -0700 (PDT), MariuszS napisał(a):

>> Czy na tabelach A, B, C jest jakiś indeks - użyteczny byłby na id_klienta?
>> Czy jest wykorzystywany (jaki jest plan wykonania)?
> 
> Indeksy są. Co do pytanie czy jest on wykorzystywany, to nie potrafię
> powiedzieć. Nie wiem jak to sprawdzić.
> 
>> Czy istotne jest to, że zapytanie ma zwracać wszystkich klientów z A?
>> Zmodyfikowane przez Sławka zwraca tylko tych, dla których są jakieś rekordy
>> w B lub C.
> 
> To da się przeżyć. W zbiorze A są rekordy, które zostały utworzone
> podczas dopisywania rekordów w B i C.
> 
> Plan wykonania wyciągnięty z IB Experta jest taki:
> PLAN SORT (SORT (JOIN (A NATURAL(B B INDEX (B_IDX3))
> PLAN (B C INDEX (C_IDX8)))))
> 
> Adapted Plan
> PLAN SORT (SORT (JOIN (A NATURAL(B B INDEX (B_IDX3)) PLAN (B C INDEX
> (C_IDX8)))))
> 
> Niestety, również nie wiem jak tą informację wykorzystać.

Czy dobrze widzę, że to plan Twojego pierwszego zapytania? Wydaje się, że
nie ma żadnych "udziwnień": najpierw łączy A z B, a potem z C korzystając z
indeksów na B i C (wewnętrzny PLAN odpowiada UNION ALL). Potem wykonuje
grupowanie i count(*) (1. SORT) i sortowanie (2. SORT). Sądzę, że
najbardziej kosztowne jest "skakanie" po indeksach na B i C.

Spróbowałbym jeszcze takiego zapytania, robiąc grupowanie przed złączeniem
z A:

select A.id_klienta, A.nazwa, cnt
from A
join  --lub left join
(
  select id_klienta, count(*) cnt
  from (
    select id_klienta from B
    union all
    select id_klienta from C
  ) x
  group by id_klienta
) razem on razem.id_klienta = A.id_klienta
order by A.nazwa

>> Jak mierzysz czas działania? Pobranie kilkunastu/dziesięciu tysięcy
>> rekordów może trwać istotną chwilę.
> 
> Hm... Mierzę normalnie. Od wciśnięcia F9 do chwili, gdy zobaczę
> wyniki.
> Jasne, że to może potrwać. Mało tego, klient tych funkcji nie będzie
> używał zbyt często, ale wolał bym, aby działały szybciej. Tym bardziej
> że do tego czasu dochodzi wykonanie drugiego, podobnego zapytania
> (równie czasochłonnego) a do tego wszystkiego przeciągnięcie tych
> danych przez sieć.

Warto byłoby sprawdzić ile czasu trwa przesyłanie tych danych przez sieć.
Może klient SQL, którego używasz potrafi pokazać czas, który upłynął do
zwrócenia pierwszego rekordu? Byłby to z grubsza czas wykonania samego
zapytania, ze względu na sortowanie (chyba, że masz indeks na A.nazwa, to
wtedy zależy od planu wykonania). Możesz spróbować wstawić wynik zapytania
do tabelki i zobaczyć ile to potrwa.

-- 
Krzysztof Jamróz
Technical Details
Message-ID: <176owfqu6a89k.1ugigacml6j9w.dlg@40tude.net>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.rmf.pl!agh.edu.pl!news.agh.edu.pl!news.onet.pl!newsfeed.neostrada.pl!atlantis.news.neostrada.pl!news.neostrada.pl!not-for-mail
References: <35f46e7d-36fb-4d54-b096-18a952c3860a@x3g2000yqa.googlegroups.com> <h309v3.1ao.1@slaszyszCIACHTO.list.pl> <d1eaff97-e088-455f-8c76-de62b7f610b9@b14g2000yqd.googlegroups.com> <itfvh1t8jt4z$.ey287zt937xi.dlg@40tude.net> <cc70a2dc-b9cb-4348-b988-3c8f52070032@s31g2000yqs.googlegroups.com>

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.rmf.pl!agh.edu.pl!news.agh.edu.pl!news.onet.pl!newsfeed.neostrada.pl!atlantis.news.neostrada.pl!news.neostrada.pl!not-for-mail
From: Krzysztof Jamróz <SpAMkrzyh000JeST@ZLYo2.pl>
Newsgroups: pl.comp.bazy-danych
Subject: Re: Optymalizacja zapytania
Date: Mon, 13 Jul 2009 22:15:13 +0200
Organization: TP - http://www.tp.pl/
Lines: 68
Message-ID: <176owfqu6a89k.1ugigacml6j9w.dlg@40tude.net>
References: <35f46e7d-36fb-4d54-b096-18a952c3860a@x3g2000yqa.googlegroups.com>  <h309v3.1ao.1@slaszyszCIACHTO.list.pl> <d1eaff97-e088-455f-8c76-de62b7f610b9@b14g2000yqd.googlegroups.com> <itfvh1t8jt4z$.ey287zt937xi.dlg@40tude.net> <cc70a2dc-b9cb-4348-b988-3c8f52070032@s31g2000yqs.googlegroups.com>
NNTP-Posting-Host: ckf177.neoplus.adsl.tpnet.pl
Mime-Version: 1.0
X-Trace: nemesis.news.neostrada.pl 1247516698 22952 83.31.81.177 (13 Jul 2009 20:24:58 GMT)
X-Complaints-To: usenet@news.neostrada.pl
NNTP-Posting-Date: Mon, 13 Jul 2009 20:24:58 +0000 (UTC)
User-Agent: 40tude_Dialog/2.0.15.1pl
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit