![]() |
![]() ![]() |
![]() |
![]() ![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 9 Pomógł: 0 Dołączył: 2.08.2008 Ostrzeżenie: (0%) ![]() ![]() |
Witam,
W skrypcie php mam funkcję, która zawiera "ciężkie" zapytanie do bazy, po wyłączeniu ów "dodatku" strona ładuje się bardzo szybko.. Po włączeniu logowania slow queries na serwerze oczywiście owe zapytanie jest tam logowane... ![]() Funkcja wraz z zapytaniami:
Chodzi o te zapytania z Left Join, da się coś z nimi zrobić? Może jakoś zastąpić Left Join innym? Pozdrawiam. |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 14 Pomógł: 5 Dołączył: 13.07.2008 Ostrzeżenie: (0%) ![]() ![]() |
1) Mogłeś dać info że to mod do forum phpBB.
2) Możesz pomęczyć autora moda żeby zoptymalizował zwoje "dzieło". ![]() 3) Wstaw do tego kodu echo $sql; i zapytanie wrzuć do phpMyAdmina dodają na początku EXPLAIN. Wklej na forum wynik, najlepiej w postaci screena, to będzie nad czym dyskutować. |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 9 Pomógł: 0 Dołączył: 2.08.2008 Ostrzeżenie: (0%) ![]() ![]() |
1) No fakt, jest to mod, ale głównie chodzi o jedno konkretne zapytanie...
2) Niestety "nie wspiera" już modyfikacji... 3) Screen: ![]() |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 14 Pomógł: 5 Dołączył: 13.07.2008 Ostrzeżenie: (0%) ![]() ![]() |
Problem jest w tym kawałku zapytania, które robi pełen skan tabelki z postami.
Kod where p1.topic_id = $topic_id \" . (($user_id > 1) ? \" or b.beer_src = $user_id or b.beer_dst = $user_id\" : ''); Możnaby o spróbować zmienić w ten sposób, bo zgaduje że to zapytanie ma podliczać tylko dla danego topicu: Kod where p1.topic_id = $topic_id \" . (($user_id > 1) ? \" AND (b.beer_src = $user_id OR b.beer_dst = $user_id)\" : '');
Ten post edytował Zbychu666 2.08.2008, 21:09:22 |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 9 Pomógł: 0 Dołączył: 2.08.2008 Ostrzeżenie: (0%) ![]() ![]() |
Niestety, po takim zabiegu liczba piw (beer) wynosi 0... Czyli źle liczy ilość.
|
|
|
![]()
Post
#6
|
|
![]() Admin Techniczny Grupa: Administratorzy Postów: 2 071 Pomógł: 93 Dołączył: 5.07.2005 Skąd: Olsztyn ![]() |
te explainy i indexy to mi srednio wychodza ale moze zaloz index na topic_id w posts bo mi tak z explaina wychodzi ze tego brak
![]() |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 121 Pomógł: 15 Dołączył: 19.07.2007 Ostrzeżenie: (0%) ![]() ![]() |
Indeks na kolumnie topic_id jest juz zalozony (jak widac w kolumnie possible keys) ale nie zostaje uzyty z powodu warunku WHERE p1.topic_id = 34872 OR b.beer_src = 2 OR b.beer_dst = 2
Chodzi o to ze uzycie indeksu w tym przypadku nie jest mozliwe. Sprobuj moze czegos takiego:
co do drugiego warunku:
po co tutaj wogole uzywasz tabeli p0? zmien jej aliasa na p1 i wywal pierwsze zlaczenie i zmien alias w klauzuli where Ten post edytował osiris 2.08.2008, 23:00:25 |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 9 Pomógł: 0 Dołączył: 2.08.2008 Ostrzeżenie: (0%) ![]() ![]() |
Działa, tylko...
Strona wygenerowana w 7.58 sekund. Zapytań do SQL: 14 Niestety to nic nie pomogło ![]() |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 121 Pomógł: 15 Dołączył: 19.07.2007 Ostrzeżenie: (0%) ![]() ![]() |
wklej explainy z nowych zapytan.
moze to problemem nie jest baza danych a skrypt php? |
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 9 Pomógł: 0 Dołączył: 2.08.2008 Ostrzeżenie: (0%) ![]() ![]() |
![]() Zapytanie na screenie nie jest widoczne w całości..(obcięte). Jak widać, teraz 2 takie zapytania się robią. Ten post edytował @Wu 3.08.2008, 10:06:55 |
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 121 Pomógł: 15 Dołączył: 19.07.2007 Ostrzeżenie: (0%) ![]() ![]() |
sprobuj zalozyc indeksy na tabeli BEER_TABLE:
1) dwie kolumny: pierwsza post_id, druga beer_src 2) dwie kolumny: pierwsza post_id, druga beer_dst potem wykonaj jeszcze raz te zapytania i wrzuc explainy Ten post edytował osiris 3.08.2008, 11:21:01 |
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 9 Pomógł: 0 Dołączył: 2.08.2008 Ostrzeżenie: (0%) ![]() ![]() |
Jak je założyć? Jakieś zapytania?
|
|
|
![]()
Post
#13
|
|
Grupa: Zarejestrowani Postów: 121 Pomógł: 15 Dołączył: 19.07.2007 Ostrzeżenie: (0%) ![]() ![]() |
Widze ze korzystasz z phpmyadmin, wiec:
- przejdz do widoku struktury tabeli BEER_TABLE - wybierz opcje: twórz indeks dla x kolumn (wpisz 2) - w nastepnym ekranie wybierz te pola ktore Ci podalem (kolejnosc sie liczy) i zatwierdz |
|
|
![]()
Post
#14
|
|
Grupa: Zarejestrowani Postów: 9 Pomógł: 0 Dołączył: 2.08.2008 Ostrzeżenie: (0%) ![]() ![]() |
![]() A tutaj w przypadku "oryginalnego" zapytania: ![]() Niestety ani indexy, ani zmienione zapytanie nic nie dało ![]() |
|
|
![]()
Post
#15
|
|
![]() Grupa: Przyjaciele php.pl Postów: 5 724 Pomógł: 259 Dołączył: 13.04.2004 Skąd: N/A Ostrzeżenie: (0%) ![]() ![]() |
Mozesz wkleic SQL tworzacy tabele [wszystkie tu wymienione] + SQLki ktorych uzywac to bedziemy moigli sie nimi pobawic
-------------------- Nie lubię jednorożców.
|
|
|
![]()
Post
#16
|
|
Grupa: Zarejestrowani Postów: 9 Pomógł: 0 Dołączył: 2.08.2008 Ostrzeżenie: (0%) ![]() ![]() |
Podać kod zapytania SQL, które tworzy tabele beers?
Tak mi przyszło do głowy...Może te zapytanie wykorzystuje jakąś funkcję dla której jest za mało przydzielonej pamięci (konfiguracja MySQL)? |
|
|
![]()
Post
#17
|
|
![]() Admin Techniczny Grupa: Administratorzy Postów: 2 071 Pomógł: 93 Dołączył: 5.07.2005 Skąd: Olsztyn ![]() |
jedna rzecz mi przychodzi na mysl
![]() a co do postu dr_bonzo chodiło o create wszystkich tabel uzytych w zapytaniu ![]() |
|
|
![]()
Post
#18
|
|
Grupa: Zarejestrowani Postów: 121 Pomógł: 15 Dołączył: 19.07.2007 Ostrzeżenie: (0%) ![]() ![]() |
Hmm, ok zacznijmy od innej strony. Jakie dane ma wyciagac ta funkcja? ilosc piw dla kazdej wiadomosci w watku? ilosc piw dla kazdego uzytkownika piszacego w danym watku?
|
|
|
![]()
Post
#19
|
|
Grupa: Zarejestrowani Postów: 9 Pomógł: 0 Dołączył: 2.08.2008 Ostrzeżenie: (0%) ![]() ![]() |
Wydaje mi się, że liczba piw, gdyż nawet w widoku profilu też jest używane.
W końcu to.. "function get_beers()". kwiateusz, w przypadku gdy dodał się Limit 0 , 30 zapytanie było w 0,0002 sekundy chyba, w przypadku gdy zmieniłem na Limit 0 , 20000 - połączenie zostało przerwane... (limit czasu upłynął?) Ten post edytował @Wu 3.08.2008, 19:15:42 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 19.08.2025 - 07:47 |