Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Optymalizacja zapytania i tabel
KirkoR
post
Post #1





Grupa: Zarejestrowani
Postów: 118
Pomógł: 0
Dołączył: 14.02.2004
Skąd: Warszawa

Ostrzeżenie: (10%)
X----


Witam, posaidam dwie tabele po około 2500 rekordów każda. Zapytanie wygląda tak:
  1. SELECT
  2. g.id, g.title, g.data_add, img.ftp_file_id, img.ftp_file_extension
  3. FROM mpw_gallery g
  4. LEFT JOIN mpw_files img ON img.ftp_content_id = g.id
  5. WHERE g.atrybut = '562' AND lang = 'pl'
  6. ORDER BY g.title
  7. LIMIT 9, 9

I teraz aby wyświetlić 9 rekoród potrzebuje 23 sekund... to jest o wiele za długo! totalna masakra. Czy ktoś ma pomysł jak to przyspieszyć? Tak dla wyjaśnienia używam adodb oraz smartów.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Synaps
post
Post #2





Grupa: Zarejestrowani
Postów: 103
Pomógł: 0
Dołączył: 1.12.2003
Skąd: Gdynia

Ostrzeżenie: (0%)
-----


Cytat(mhs @ 2005-11-03 16:12:56)
Cytat(Synaps @ 2005-11-03 11:33:38)
zrezygnuj z ORDER BY i sortowanie zrób na poziomie php'a.

Być może usuwając ORDER BY w zapytaniu faktycznie cos przyspieszysz wykonanie samego zapytania, jednak przerzucajac to na poziom php na pewno więcej stracisz niż zyskasz. Wszystkie (może prawie wszystkie) operacje jakie możliwe są na zrzucenie na system zarządzania bazą powinny być wykonane przez to właśnie oprogramowanie.

  1. ORDER BY g.title
  2. LIMIT 9, 9


Nie wiem jak dokładnie działa proces przetwarzania zapytań z LIMIT w MySQL'u ale podejrzewam ze w pierwszej fazie w przykładzie który tutaj mamy sortowany jest cały kursor z wynikiem. Jeśli jest to załóżmy hipotetycznie 25k rekordow, to proces sortowania zacząco wydłuży czas zwrócenia ostatczenego wyniku. Dlatego zasugerowałem żeby użyć sortowania po stronie php'a bo widziałem że z tego kursora wybierane są bardzo małe w porównaniu z kursoerm ilości rekordów.
Ale można tak sobie gdybać (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Dlatego moją sugestią jest sprawdzenie jak zachowa się zapytanie bez ORDER BY. Jest to jeden z hintów do tunningu zapytanka. jednak jak już było tutaj wspomniane bez dokładnych info. o strukturze tabeli i relacjach nie da się dać konkretnej odpowiedzi.

Jednak zgodze się z Tobą mhs w 100% że bardzo dobrą i wskazaną praktyką jest przerzucenie jak największej ilości operacji przetwarzania informacji na baze danych.
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 5.10.2025 - 00:43