ďťż
 
group by vs distinct - wydajnosc ďťż
 
group by vs distinct - wydajnosc
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

group by vs distinct - wydajnosc



blochoo - 18-03-2006 01:15
group by vs distinct - wydajnosc
  Witam,

mam 2 tabele: klienci i zakupy. W skrocie ich schemat wyglada tak:

klienci (id_klienta, nazwisko) ~ 100 tys rekordow.
zakupy(id_towaru, id_klienta, data) ~ 500 tys rekordow.

Oczywiscie klient moze miec (0,n) wpisow w tabeli zakupy. Chce znalezc
wszystkich klientow, ktorzy zrobili zakupy od dnia 'x' do dnia 'y'.

Jakie zapytanie jest wg Was najbardziej wydajne i dlaczego?

1. join na (klienci, zakupy) i potem robienie group by po id_klienta?
2. join na (klienci, zakupy) i select z klauzula distinct?
3. select nazwisko from klienci where id_klienta in (select id_klienta
from zakupy where data.....)))
4. Podobne zapytanie jak 3. tylko z uzyciem exists

Pozdrawiam,
blochoo
CS@PP





=?ISO-8859-2?Q?Micha=B3?= Kuratczyk - 18-03-2006 01:15

  "blochoo" <piotr.bloch@gmail.com> wrote:
> mam 2 tabele: klienci i zakupy. W skrocie ich schemat wyglada tak:
To ja sie na początek przyczepię od razu:

1. Dlaczego w skrócie? Zadajesz pytanie, czyli oczekujesz, że ktoś
Ci pomoże, a nie chce Ci się poświęcić odrobiny czasu, żeby
porządnie opisać problem.
2. Nie napisałeś jaka baza danych, nie napisałeś jakie masz indeksy,
nie napisałeś jaki jest rozkład danych (sama ilość to za mało).
3. Czemu opowiadasz o tabelach, zamiast po prostu podać ich definicje?
Wtedy każdy, kto chciałby się z Twoim problemem zmierzyć, po prostu
wykonałby u siebie odpowiednie CREATE... i mógł się pobawić,
sprawdzić, potestować.
4. Dlaczego opowiadasz o zapytaniach, zamiast podać ich treść?
5. Dlaczego nie wykonasz u siebie tych zapytań i nie porównasz czasów
odpowiedzi, żeby samemu odpowiedzieć na to pytanie?

> Jakie zapytanie jest wg Was najbardziej wydajne i dlaczego?
Według nas?! A jakie to ma znaczenie? Wydajność nie jest kwestią
opinii, tylko faktów.

> 1. join na (klienci, zakupy) i potem robienie group by po id_klienta?
Nie wiem co masz na myśli.

> 2. join na (klienci, zakupy) i select z klauzula distinct?
Zapytanie z IN wykonuje się w ten właśnie mniej więcej sposób
(przynajmniej w Oracle). Podzapytanie jest obliczane, robiony jest
DISTINCT, a potem złączenie z wynikiem zewnętrznego zapytania.

> 3. select nazwisko from klienci where id_klienta in (select id_klienta
> from zakupy where data.....)))
> 4. Podobne zapytanie jak 3. tylko z uzyciem exists
IN jest generalnie lepszy od EXISTS, jeśli główne zapytanie zwraca dużo
danych, a podzapytanie mało. EXISTS jest generalnie lepsze, jeśli na
zewnątrz masz mało danych, a w podzapytaniu dużo.

Ja bym w pierwszym podejściu (odruchowo) napisał wariant z IN i
jest duża szansa, że byłby on najwydajniejszy. Ale jeszcze raz się
pytam - po co zgadywać, skoro można to po prostu sprawdzić? Zwłaszcza,
że jak rozumiem pytanie ma jedynie zaspokoić Twoją ciekawość, bo gdybyś
faktycznie miał problem z wydajnością zapytania, to powiedziałbyś,
której wersji aktualnie używasz i co jest z nią nie tak...

--
Michał Kuratczyk
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • effulla.pev.pl
  • comp
    Luminacja vs luminancja MS SQL 2005 vs MS SQL 2000 =?ISO-8859-2?Q?Poszukjue_ksi=B1=BFki_"Oracle_?= =?ISO-8859-2?Q?optymalizacja_wydajno=B6ci"..?= mysql+php - =?ISO-8859-2?Q?wydajno=B6=E6_przy_olbrzymiej_i?==?ISO-8859-2?Q?lo=B6ci_rekord=F3w?= [ORACLE] Dodanie kolumny typu BLOB - =?ISO-8859-2?Q?wp=B3yw_na?==?ISO-8859-2?Q?_wydajno=B6c?= photoshop vs photoshop elements Fujitsu Siemens LCD VS. Eizo LCD Macromedia Flash 8 vs Flash MX 2004 [MySQL] problem z kwerenda MySQL 4.1.21 vs 5.0.11 [mysql] CONCAT agregujący, ale nie GROUP_CONCAT()
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • autwywalczyl.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