Sławomir Gajowniczek

Sławomir Gajowniczek Nowe doświadczenia

Temat: Jak optymalizować zapytania SQL?

Myslę, że to może być ciekawy temat.
Każdy ma chyba jakieś swoje nawyki lub magiczne sztuczki ;) na zmniejszanie kosztów zapytań. Subquery a może lepiej JOIN ? A możę cos innego?
Podzielmy się doświadczeniem.

konto usunięte

Temat: Jak optymalizować zapytania SQL?

Jeśli nie da się inaczej niż skorzystać z pod zapytania to niestety trzeba :)... ale ogólnie odradzam ze względu na wydajność... Polecam korzystanie z JOIN'ów opartych na dobrych indeksach... a co do samych indeksów to polecam indeksować takie pola które nie wiele się różnią między sobą... np. int'y... pola które dobrze indeksować to oczywiście te które są umieszczane najczęściej w WHERE ew. ON jeśli korzystamy z JOIN'ów... to chyba tyle z tego co na tę chwilę mogę sobie przypomnieć...
Łukasz Schabek

Łukasz Schabek Architekt Rozwiązań

Temat: Jak optymalizować zapytania SQL?

Zauważyłem ostatnio że JOINując po więcej niż jednym indeksie koszt zapytania wzrasta o około 1/4... Ważne też żeby wiedziec gdzie i czego szukać ;)
Zanalzłem kiedyś coś takiego:


Cost Range
Worry Time
Description


<100
Nearly instantanious
You know what you want and where to find it


100 - 1000
10s of seconds
You know what you want but its not quite so simple


1,000-10,000
A couple of Minutes
You're OK but you're having to work to find your information


10,000 - 100,00
10s of Minutes
YYou either have a really big job or you're unsure the best way to
find the information, have a think about it.


100,000 - 1,000,000
Upto an Hour
WHY ARE RUNNING THIS? SURELY IT CAN BE WRITEN BETTER? IS THIS JOB
REALLY THIS HUGE?


1,000,000 - 1,000,000,000
Hours
THE DBAs ARE LOOKING FOR YOU, BETTER HAVE A VERY GOOD JUSTIFICATION
READY


1,000,000,000+
Never
TURN IT OFF, TURN IT OFF NOW, WHY ISN"T IT OFF YET!





Łukasz Schabek edytował(a) ten post dnia 29.08.06 o godzinie 10:55
Paweł Pasieka

Paweł Pasieka Software Development
Supervisor

Temat: Jak optymalizować zapytania SQL?

W bazach oraclowych (niestety nie wiem czy w innych też) jeżli mamy problem z zapytaniem które nie chce z jakiegoś powodu wykonywać sie po indeksie możemy użyć hintów które wymuszą wykonanie się zapytania po tych indeksch po których chemy.
Select /*+index(alias tabeli,nazwa indexu) */
Wogóle używanie hintów jest przydatne są to podpowiedzi dla zapytania. Polecam lekturę strony http://www.psoug.org/reference/hints.html

konto usunięte

Temat: Jak optymalizować zapytania SQL?

do Wypowiedzi Łukasza:

rozumiem, że to taka rozrywak na jakimś forum?
do prawdy ma się to nijak
dla przykładu powiem Ci, że wyswietlenie prostej tabelki (20 kolumn, gdzie dwie pierwsze sa indeksowane(w kazdej jedenasto cyfrowy numer)), która ma 150 milionów rekordów nie trwa mniej niż kilka sekund :) Mówie o Oracle na AIX'ie i prostym select.

Imo dobry JOIN przy rozbudowanych widokach to podstawa choc:
'and kolumna in (select ......)' tez nie jest najgorsza metodą


Wszystko jest w miare proste jeśli pracujecie na bazach z mala iloscia rekordów (do powiedzmy 500tys wierszy) i lokalnie.
Ja mam problem z wydajnością związany z rozproszoną strukturą w firmie. Pracuje na kilku bazach w kilku oddziałach (Oracle i MSSQL), muszę zmagać sie z domenami, szybkością sieci i ogromną ilością danych. Jak tutaj zadbać o optymalizację zapytań? I czy wogóle cos one dają skoro i tak jestem hamowany przez sieć?
Łukasz Schabek

Łukasz Schabek Architekt Rozwiązań

Temat: Jak optymalizować zapytania SQL?

Myślę że to dosyć realistyczne zestawienie chociaż z małą dozą humoru ;)
Oczywiście, zgadzam się że liczenie kosztów dla prostych selectów nie ma sensu, bo wyświetlanie danych w konsoli (np. piewszych 500 zbuforowanych rekordów) ze 150 mln tabeli zajmuję seknudę. Jednak zrzut tych danych do pliku płaskiego trwa już trochę dłużej...
Z doświadczenia powiem Ci że pisząc zapytania (nawet skalarne) na 120mln rekordów Explain plan jest niezastąpionym narzędziem, a jedno zero więcej na końcu może oszczędzić duuużo czasu i pieniędzy ;)

Dla Ciekawostki powiem, że jeśli łączysz się z odległymi bazami przez DB Linki, to licząc koszty można zoptymalizować zapytania pod względem przepustowości sieci - czy lepiej policzyć coś lokalnie, czy użyć DB Linków...

konto usunięte

Temat: Jak optymalizować zapytania SQL?

strona php

"wyświetliłeś 4201442 rekordów, użyłeś 201.853 s. czasu serwera."

Czy to dobry wynik przy widoku złożonym z 4 tabel (nie mowie tu o domowej ilości wierszy ale o bardziej produkcyjnej:>)?
PHP rysuje tu tabelke rozrastającą się w dwie strony i dobiera rekordy na określone dni tygodnia wg funkcji.
Czy powiniennem się cieszyć z takiego wyniku czasowego?
Sławomir Gajowniczek

Sławomir Gajowniczek Nowe doświadczenia

Temat: Jak optymalizować zapytania SQL?

Jaka baza danych ? Jaki sprzęt? Rozumiem, że kolumny po ktorych łączysz są poindeksowane.

konto usunięte

Temat: Jak optymalizować zapytania SQL?

oczywiscie ze poindeksowane.
bazy i sprzęt różny
- MSSQL 2000 (win 2003 serv. HP ProLiant DL380 G4)
- Oracle 9 (AIX, IBM eServer i5)
- Oracle 8(AIX, jw)

+ dwie bazy po dblinkach (dwa rozne serwery, oracle)



Wyślij zaproszenie do