ďťż
 
Optymalizacja ďťż
 
Optymalizacja
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

Optymalizacja



pachu - 22-05-2006 00:01
Optymalizacja
  Hello,
Poszukuje materialow w sieci dotyczacych optymalizacji zapytan SQL -
owych badz zaawansowanego SQL -a. Wiekszosc tutoriali niestety jest na
poziomie prostych selectow ... Jakies sugestie ??

--
pachu





=?ISO-8859-2?Q?Micha=B3?= Kuratczyk - 23-05-2006 00:24

  pachu wrote:
> Poszukuje materialow w sieci dotyczacych optymalizacji zapytan SQL -
> owych badz zaawansowanego SQL -a. Wiekszosc tutoriali niestety jest na
> poziomie prostych selectow ... Jakies sugestie ??
Żeby pisać wydajne SQLe musisz po prostu wiedzieć jak działa Twoja baza,
jakie funkcje/mechanizmy oferuje i jak porównywać wydajność różnych
rozwiązań. Czyli generalnie dokumentacja Twojej bazy - przede wszystkim SQL
reference oraz wszystko o dostępnych rodzajach
tabel/indeksów/widoków/klastrów/planów/itd, ale im więcej dokumentacji
wchłoniesz tym lepiej.

--
Michał Kuratczyk




Bastion - 24-05-2006 00:18

 
Użytkownik "Michał Kuratczyk" <kura@lj.pl> napisał w wiadomości
news:e4rtik$2e2$3@abg.com.pl...

> Żeby pisać wydajne SQLe musisz po prostu wiedzieć jak działa Twoja baza,
> jakie funkcje/mechanizmy oferuje i jak porównywać wydajność różnych
> rozwiązań. Czyli generalnie dokumentacja Twojej bazy - przede wszystkim SQL
> reference oraz wszystko o dostępnych rodzajach
> tabel/indeksów/widoków/klastrów/planów/itd, ale im więcej dokumentacji
> wchłoniesz tym lepiej.

Chyba troche przesadzasz? Jasne ze teoria jest wazna ale mozna przeciez
po prostu przetestowac szybkosc zapytan. Lepsze bazy maja specjalne
profilery pozwalajace sprawdzac ilosc wywolan poszczegolnych procedur
wbudowanych,
triggerow, eventow, czas wykonania poszczegolnych zapytan, itp.
Druga sprawa, przeciez zawsze mozna, testowane zapytanie,
odpalic je z poziomu jezyka wyzszego poziomu:

//BCB
void __fastcall TForm1::Button1Click(TObject *Sender)
{ DWORD start;
start=GetTickCount();
Query1->Close();
Query1->SQL=Memo1->Lines;
for(int i=0;i<CSpinEdit1->Value;i++)
Query1->ExecSQL();
ShowMessage("Czas wykonania: "+IntToStr(GetTickCount()-start)+" ms");
Screen->Cursor=crDefault;
}

Wracajac do wydajnosci zapytan, z moich doswiadczen wynika:
1) Nad optymalnoscia, szybkoscia zapytan trzeba pomyslec juz
na poziomie projektowania bazy.

2) Wszelkie join-y sa wyjatkowo wolne.

3) W gotowej bazie, jezeli czynnikiem krytycznym nie
jest objetosc bazy to... indeksowac, indeksowac, indeksowac;)

4) Oczywiscie (o czym pisales) help i studiowanie hasla "optimizer" i
"optimizations".

Pozdrawiam




=?ISO-8859-2?Q?Micha=B3?= Kuratczyk - 25-05-2006 00:49

  Bastion wrote:
>> Żeby pisać wydajne SQLe musisz po prostu wiedzieć jak działa Twoja baza,
>> jakie funkcje/mechanizmy oferuje i jak porównywać wydajność różnych
>> rozwiązań. Czyli generalnie dokumentacja Twojej bazy - przede wszystkim
>> SQL reference oraz wszystko o dostępnych rodzajach
>> tabel/indeksów/widoków/klastrów/planów/itd, ale im więcej dokumentacji
>> wchłoniesz tym lepiej.
> Chyba troche przesadzasz?
Piszesz, że przesadzam, a potem powtarzać praktycznie to samo. :-)

> Jasne ze teoria jest wazna ale mozna przeciez
> po prostu przetestowac szybkosc zapytan.
Ale trzeba wiedzieć jak przerobić zapytanie - jak inaczej można uzyskać ten
sam wynik, żeby porównać która metoda jest lepsza (często nie trzeba tego
nawet odpalać - przy odrobinie doświadczenia wiele przypadków jest
oczywistych). Dlatego napisałem "musisz wiedzieć (...) jakie
funkcje/mechanizmy oferuje".

> Lepsze bazy maja specjalne profilery pozwalajace sprawdzac ilosc wywolan
> poszczegolnych procedur wbudowanych, triggerow, eventow, czas wykonania
> poszczegolnych zapytan, itp.
Dlatego napisałem "musisz wiedzieć (...) jak porównywać wydajność różnych
rozwiązań". Jak już mamy kilka wersji, to jak sprawdzić która jest lepsza.
Te same / podobne narzędzia stosuje się też, żeby znaleźć co powoduje wolne
działanie systemu (wąskie gardła).

> Druga sprawa, przeciez zawsze mozna, testowane zapytanie,
> odpalic je z poziomu jezyka wyzszego poziomu:
Można, tylko po co. :->
Więcej roboty, a w dodatku dodajesz nowe elementy, które mogą wpłynąć na
wynik porównania.

> 1) Nad optymalnoscia, szybkoscia zapytan trzeba pomyslec juz
> na poziomie projektowania bazy.
Oczywiście. Dlatego napisałem "wszystko o dostępnych rodzajach
tabel/indeksów/widoków/klastrów/planów/itd". Projektując strukturę bazy
zapewniamy sobie (lub nie) możliwość pisania wydajnych zapytań na niej
operujących. Jak system już działa (a to jest moment kiedy wiele osób
zaczyna dopiero optymalizację), to zmiana czegokolwiek jest znacznie
trudniejsza.

> 2) Wszelkie join-y sa wyjatkowo wolne.
Tu się zupełnie nie zgodzę. Bazy danych są stworzone do robienia joinów.
Albo używasz kiepskiej bazy, albo używasz jej źle. Może jakiś przykład?

> 3) W gotowej bazie, jezeli czynnikiem krytycznym nie
> jest objetosc bazy to... indeksowac, indeksowac, indeksowac;)
Objętość to pół biedy. Przede wszysktim krytycznym czynnikiem nie może być
czas zapisów do bazy, które z powodu indeksów trwają znacznie dłużej.
Strategia "indeksować, indeksować, indeksować", to głównie hurtownie danych,
gdzie zapisów praktycznie nie ma. No i nawet indeksując na potęgę, to
jeszcze trzeba wiedzieć jak (indeksy zwykłe czy bitmapowe, na pojedynczej
kolumnie czy na wielu, itd). Żeby wiedzieć jak indeksować, to trzeba
wiedzieć jak działa baza (z jakich indeksów w jakich sytuacjach skorzysta,
a w jakich nie). Np. co z tego, że na każdej kolumnie założysz indeks,
jeśli w każdej kolumnie dowolna wartość wybiera powiedzmy 10% danych? Jest
duża szansa, że baza w ogóle nie skorzysta z żadnego z tych indeksów. Ale
jeśli wiesz, że zapytania zwykle wybierają konkretną wartość kolumn
A, B i C, a kombinacja tych trzech wartości wybiera 0.1% danych z tabeli, to
baza z przjemnością będzie korzystać z pojedynczego indeksu na tych trzech
kolumnach.

--
Michał Kuratczyk





Bastion - 25-05-2006 00:50

 
Użytkownik "Michał Kuratczyk" <kura@lj.pl> napisał w wiadomości
news:e513tm$7rk$1@abg.com.pl...
> Bastion wrote:
> Piszesz, że przesadzam, a potem powtarzać praktycznie to samo. :-)

W pierwszym poscie polozyles caly nacisk na wiedze teoretyczna.
W mojej skromnej wypowiedzi staralem sie polozyc akcent na
mozliwosci praktycznego testowania, optymalizowania SQL-a.

> Ale trzeba wiedzieć jak przerobić zapytanie - jak inaczej można uzyskać ten
> sam wynik, żeby porównać która metoda jest lepsza (często nie trzeba tego
> nawet odpalać - przy odrobinie doświadczenia wiele przypadków jest
> oczywistych). Dlatego napisałem "musisz wiedzieć (...) jakie
> funkcje/mechanizmy oferuje".

Sprobuj zoptymalizowac procedure wbudowana liczaca 500- 1000 linijek kodu SQL,
bez pomocy narzedzi profilujacych lub prostych sztuczek programistycznych
(obliczanie czasu wykonania z poziomu jezyka wyzszego poziomu).

> Dlatego napisałem "musisz wiedzieć (...) jak porównywać wydajność różnych
> rozwiązań". Jak już mamy kilka wersji, to jak sprawdzić która jest lepsza.
> Te same / podobne narzędzia stosuje się też, żeby znaleźć co powoduje wolne
> działanie systemu (wąskie gardła).

Szkoda, ze nie napisales o tym tak wyraznie w pierwszym poscie,
nie byloby zadnej dyskusji.

> > 2) Wszelkie join-y sa wyjatkowo wolne.
> Tu się zupełnie nie zgodzę. Bazy danych są stworzone do robienia joinów.
> Albo używasz kiepskiej bazy, albo używasz jej źle. Może jakiś przykład?

Zrob selecta z 1,5-cioma, 10-oma join-ami na nieideksowanej tablicach liczacych
po 100000 -1000000 rekordow:)

> > 3) W gotowej bazie, jezeli czynnikiem krytycznym nie
> > jest objetosc bazy to... indeksowac, indeksowac, indeksowac;)
> Objętość to pół biedy.

Tutaj sie zgadzam, piszesz o rzeczach oczywistych;)

Pozdrawiam




=?ISO-8859-2?Q?Micha=B3?= Kuratczyk - 26-05-2006 01:43

  Bastion wrote:
> W pierwszym poscie polozyles caly nacisk na wiedze teoretyczna.
Bo jeśli chodzi o optymalizację zapytań, to moim zdaniem jest niezbędna.
Wiadomo, że sama teoria to za mało, ale jeśli nie wiesz, że istnieje jakiś
mechanizm, to go nie użyjesz. A może to właśnie jego użycie spowodowałoby
olbrzymi wzrost wydajności (np. in-line view zamiast skorelowanego
podzapytania).

> Sprobuj zoptymalizowac procedure wbudowana liczaca 500- 1000 linijek kodu
> SQL, bez pomocy narzedzi profilujacych lub prostych sztuczek
> programistycznych (obliczanie czasu wykonania z poziomu jezyka wyzszego
> poziomu).
Nie używam języków wyższego poziomu przy testach/optymalizacji. Nie wiem jak
inne bazy, ale Oracle zapewnia w tym temacie niesamowite możliwości na
poziomie PL/SQLa.

>> > 2) Wszelkie join-y sa wyjatkowo wolne.
>> Tu się zupełnie nie zgodzę. Bazy danych są stworzone do robienia joinów.
>> Albo używasz kiepskiej bazy, albo używasz jej źle. Może jakiś przykład?
> Zrob selecta z 1,5-cioma, 10-oma join-ami na nieideksowanej tablicach
> liczacych po 100000 -1000000 rekordow:)
To tak jakbyś powiedział "samochody nie potrafią szybko pokonywać wzniesień;
jak nie wierzysz, to spróbuj jechać tyłem pod oblodzoną górkę na oponach
typu slick". :->

--
Michał Kuratczyk
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • effulla.pev.pl
  • comp
    pobranie danych z 3 tabel CD licznik sciągnięć [Oracle] SID i port bazy "PHOTOSHOP I GRAFIKA BITMAPOWA " problemy z logowaniem si? do bazy danych Format CSV z LATIN2 na UTF8 Certyfikat Oracle [photoshop] Fatalne zdjecia - co z nimi zrobic
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • latwa-kasiora.pev.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