![]() |
![]() |
![]() ![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 96 Pomógł: 0 Dołączył: 11.09.2006 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Witam,
Staram sie jakoś zoptymalizować zapytanie bo obecnie trwa bardzo długo. Nie wiem czy to wina bazy (a słyszałem bardzo wiele złego o tej bazie jeśli idzie o używaną pamięci), czy może moje zapytanie SQL jest nie optymalne. O to moje zapytanie SQL w jednym wywołaniu:
Czas oczekiwania na wynik tego zapytania trwa od 5 do 12 min.(IMG:http://forum.php.pl/style_emoticons/default/exclamation.gif) !! oraz zapytanie SQL w 17 zapytaniach: (Najpierw jedno zapytanie:)
a następnie wyniki poprzedniego zapytania puszczam w pętli foreach i dla każdego wiersza wywołuje kolejne zapytanie SQL (jest takich wywołań 16):
Czas oczekiwania na wynik tych dwóch powyższych zapytań (z czego drugie zapytanie jest wywołane w pętli 16 razy) trwa od 1 do 2 min.(IMG:http://forum.php.pl/style_emoticons/default/exclamation.gif) Wyniki tych zapytań są identyczne. I teraz pytanie, dlaczego tak sie dzieje... Może zapytania SQL są jakoś przeze mnie mało efektywnie stworzone.. Wielkie dzięki za jakąkolwiek pomoc, sugestie albo uwagii... Pozdrawiam... |
|
|
![]() |
![]() ![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 96 Pomógł: 0 Dołączył: 11.09.2006 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Proponuje rozbic wszystko na zapytania bez joinow i stosowac je jak subselecty. Możesz powiedzieć coś więcej o tych subselectach (albo skierować gdzieś na jakąś dobra literaturę o ty m w necie) Być może to nie ma znaczenia ale to nie jest MySQL ale FireBird (słyszałem że jest jeszcze gorsza) czy masz pozakladane indexy, ile jest rekordow w kazdej z tabel? Wydaje mi sie że w FireBirde automatycznie zakładają się index na tworzoną tabele. W każdym bądź razie gdy wywołuje zapytanie w programie do obsługi tej bazy mam taki zrzut, więc raczej tabele są indexowane Kod Plan PLAN SORT (JOIN (JOIN (JOIN (JOIN (JOIN (JOIN (JOIN (JOIN (JOIN (A8 INDEX (RDB$FOREIGN361),T INDEX (RDB$PRIMARY325),W INDEX (RDB$FOREIGN823)),A1 INDEX (CENNIK_IDX1)),A2 INDEX (CENNIK_IDX1)),A3 INDEX (ATRYBUTY_IDX1)),A4 INDEX (ATRYBUTY_IDX1)),A5 INDEX (ATRYBUTY_IDX1)),A6 INDEX (ATRYBUTY_IDX1)),A7 INDEX (ATRYBUTY_IDX1)),A9 INDEX (ATRYBUTY_IDX1))) Adapted Plan PLAN SORT (JOIN (JOIN (JOIN (JOIN (JOIN (JOIN (JOIN (JOIN (JOIN (A8 INDEX (FK_ATRYBUTY_DEFCECHY),T INDEX (PK_TOWARY),W INDEX (FK_WERSJE_TOWARY)),A1 INDEX (CENNIK_IDX1)),A2 INDEX (CENNIK_IDX1)),A3 INDEX (ATRYBUTY_IDX1)),A4 INDEX (ATRYBUTY_IDX1)),A5 INDEX (ATRYBUTY_IDX1)),A6 INDEX (ATRYBUTY_IDX1)),A7 INDEX (ATRYBUTY_IDX1)),A9 INDEX (ATRYBUTY_IDX1))) co do ilości rekordów w tabelach, to jest ich sporo: tabela 'atrybuty' to 34728 rekordów, tabela 'towary' to 20772 rekordów, tabela 'cennik' to 106888 rekordów, tabela 'towpliki' to 980 rekordów, tabela 's_binary' to 1169 rekordów. --------------------------------------------------------------------- Nie wiem czy subselecty działaja na bazie FireBird - Chyba nie... Ramu na maszynie jest 8GB a i tak nieraz sie zapycha i trzeba restartować bo zapytania do bazy trwają po paręnaście sekund. Ten post edytował Sokrates 26.05.2008, 11:23:31 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 6.10.2025 - 00:08 |