Article View: pl.comp.bazy-danych
Article #183303Re: Optymalizacja zapytania
From: Krzysztof Jamróz
Date: Mon, 13 Jul 2009 20:15
Date: Mon, 13 Jul 2009 20:15
68 lines
3814 bytes
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-mailReferences:
<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