![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 3 Pomógł: 0 Dołączył: 27.10.2009 Ostrzeżenie: (0%) ![]() ![]() |
Witam jestem kompletnym ignorantem w PHP, usiłuję jedynie znaleźć kogoś, kto jest w stanie poprawić poniższy kod, który obciąża bazę SQL. Próbowało wielu PHP-owców, ale nikt nie był w stanie znaleźć przyczyny "mulenia" serwera. Wiem, że jest tu kilka kosmetycznych błędów składni, ale problem tkwi w zapytaniu da bazy, to potwierdzili wszyscy analizujący kod. Strona chodzi pod adresem kontrowersje.net, na cms Drupal, kod który wywala serwer jest następujący:
Będę wdzięczny za wszelkie sugestie i podpowiedzi, jestem również skłonny nawiązać współpracę na zasadzie zleceń z kimś kto da sobie radę z PHP i Drupalem kontrowersje@kontrowersje.net Ten post edytował kontrowersje 27.10.2009, 18:34:13 |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 243 Pomógł: 33 Dołączył: 30.01.2008 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
wg mnie trochę obciąża funkcja "ereg_replace", polecałbym zamienić na "str_replace".
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 3 Pomógł: 0 Dołączył: 27.10.2009 Ostrzeżenie: (0%) ![]() ![]() |
Dziękuję za odpowiedź. Niestety to już było testowane i nie pomogło.
|
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Skoro wiesz, że to zapytanie do bazy zabija serwer to może pokaż nam to zapytanie w formie jakiej trafia do bazy, a nie wymagaj bezsensownego analizowania koszmarnego kodu, w dodatku nie wstawionego w żadne BBCode.
|
|
|
![]()
Post
#5
|
|
Grupa: Moderatorzy Postów: 4 069 Pomógł: 497 Dołączył: 11.05.2007 Skąd: Warszawa ![]() |
Proszę dodać BBcode, w przeciwnym wypadku temat zostanie zamknięty .
|
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 3 Pomógł: 0 Dołączył: 27.10.2009 Ostrzeżenie: (0%) ![]() ![]() |
Chętnie dodam to BB coś tam ale nie mam pojęcia co to jest. Jak napisałem jestem ignorantem od PHP i programowania, dlatego szukam pomocy.
Edit: Chyba załapałem o co chodzi z tym BB coś tam, wklejam zatem zapytanie z bazy.
Ten post edytował kontrowersje 27.10.2009, 19:31:35 |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 73 Pomógł: 4 Dołączył: 13.01.2004 Skąd: Bielsko-Biała Ostrzeżenie: (0%) ![]() ![]() |
nie wiem czy to cos da, ale napewno na poczatek bym spróbował wywalić wszystkie comments.nid <> na rzecz jednego not in(x,y,z)
http://dev.mysql.com/doc/refman/5.0/en/com...function_not-in pozatym last_comment_uid<>519 na stałe ustawione w kodzie? trochę chyba średni ma sens? |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 99 Pomógł: 15 Dołączył: 15.11.2007 Skąd: Nowogród Bobrz. Ostrzeżenie: (0%) ![]() ![]() |
1. Zamiast robić takie AND ... AND... AND może lepiej zrobić WHERE nid NOT IN (x,y,z,...)?
2. Sprawdź, czy na tym polu (nid) na pewno jest indeks jak i na wszystkich polach, po których jest robiony JOIN. 3. Ale i tak raczej spowalniać będzie takie coś: AND (UPPER(comments.name) != UPPER('MaciekS')), bo to musi być wyszukiwane tekstowo a nie indeksem. Chyba, że jest na tym indeks pełnotekstowy. Trzeba by to spróbować zamienić na coś, co się da zaindeksować. |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 898 Pomógł: 80 Dołączył: 31.05.2008 Ostrzeżenie: (20%) ![]() ![]() |
Rozumiem że indexy pozakładane? Oraz primare keye?
a to na cholere? |
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 561 Pomógł: 72 Dołączył: 15.11.2006 Ostrzeżenie: (0%) ![]() ![]() |
Zadaj sobie jedno, ale zaj$#@cie ważne pytanie, czy te JOINY na pewno są Ci niezbędne, czy tych porównań nie da się przerzucić do WHERE ?
|
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 285 Pomógł: 37 Dołączył: 18.12.2007 Skąd: Łódź Ostrzeżenie: (0%) ![]() ![]() |
Ja mam parę pytań:
1. Jaki silnik? 2. Jaka wersja silnika? 3. Ile wierszy zwraca zapytanie bez warunków comments.nid<>...? 4. Setki tych wykluczeń comments.nid to jest 150 czy 1500? 5. Skąd bierzesz wykluczane comments.nid? 6. Muli się tzn jaki konkretnie jest czas wykonania zapytania? Edit: Cytat Zadaj sobie jedno, ale zaj$#@cie ważne pytanie, czy te JOINY na pewno są Ci niezbędne, czy tych porównań nie da się przerzucić do WHERE ? to moim zdaniem fatalny pomysł niezależnie od silnika. Ten post edytował netmare 28.10.2009, 21:20:41 |
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 561 Pomógł: 72 Dołączył: 15.11.2006 Ostrzeżenie: (0%) ![]() ![]() |
Cytat to moim zdaniem fatalny pomysł niezależnie od silnika. A możesz napisać dlaczego ? |
|
|
![]()
Post
#13
|
|
Grupa: Zarejestrowani Postów: 285 Pomógł: 37 Dołączył: 18.12.2007 Skąd: Łódź Ostrzeżenie: (0%) ![]() ![]() |
1. Zmniejszona przejrzystość kodu.
2. Bardziej problematyczna implementacja złączeń left,right i full. 3. Wydajności tym nie poprawisz napewno, a obawiam się że jak zapuścisz na np Postgresie złączenie inner join na dwóch tabelach które mają po 2000000 wierszy i część wspólną 1000000 rekordów, po kolumnie na której z jakiś powodów nie masz indeksów, to przy inner join napewno planer zahaszuje wartości po których ma nastąpić złączenie i szybko upora się z wynikiem, natomiast przy takim explicit joinie po znaku równości myślę że może nie puścić hashowania i wtedy okaże się że położyłeś serwer na kilkanaście minut (nie mam w tej chwili jak sprawdzić, żeby powiedzieć to napewno). |
|
|
![]()
Post
#14
|
|
Grupa: Zarejestrowani Postów: 46 Pomógł: 10 Dołączył: 30.06.2008 Ostrzeżenie: (0%) ![]() ![]() |
Podaj proszę z jakiej bazy danych korzystasz.
Bardzo dużo rzeczy hardkodujesz dlatego domyślam się kod który wkleiłeś jest wersją testową bo jako wersji produkcyjnej nikt chyba by tego nie używał. Skoro i tak hardkodujesz listę zbanowanych loginów to nie wykonuj na nich niepotrzebnych funkcji. Zamiast
zrób:
No i nie musisz generować tego php-em bo po co męczyć serwer obliczeniami które zawsze zwracają taki sam wynik. Wrzuć to bezpośrednio do ostatniego zapytania. Jeśli twoja baza danych obsługuje podzapytania możesz połączyć dwa zapytania w jedno. Np tak:
Ale i tak największy wzrost wydajności możesz uzyskać przez odpowiednie indeksy. Jeszcze raz proszę autora o informacje z jakiej bazy danych korzysta. Jeśli autor chce naprawdę konkretnej odpowiedzi proszę o strukturę bazy danych (samą strukturę, bez danych). Wtedy będzie można udzielić bardziej konkretnej odpowiedzi PS. Co oznacza klamra w "FROM {node} node".? Alias? A może schemat? Nigdy nie spotkałem się z takim zapisem. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 3.10.2025 - 22:57 |