Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> (za)długi czas wykonania zapytania
devnul
post
Post #1





Grupa: Zarejestrowani
Postów: 1 470
Pomógł: 75
Dołączył: 21.09.2005
Skąd: że znowu

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


Jak w temacie. Mam zapytanie:
  1. SELECT `n`.`news_id`, `t`.`newstext_title`, `t`.`newstext_text`, `n`.`news_publish`,`p`.*
  2. FROM `news` AS `n`
  3. JOIN `newstext` AS `t` ON `n`.`news_id`=`t`.`newstext_parent`
  4. JOIN `news2cat` AS `nc` ON `n`.`news_id`=`nc`.`news2cat_news`
  5. LEFT JOIN `news2photo` AS `np` ON `np`.`news2photo_news`=`n`.`news_id`
  6. LEFT JOIN `photo` AS `p` ON `np`.`news2photo_photo`=`p`.`photo_id`
  7. WHERE `n`.`news_status`='1' AND `n`.`news_publish`<='1198155351' AND (`n`.`news_publishend`>='1198155351' OR `n`.`news_publishend`=0) AND `nc`.`news2cat_category`
  8. IN ('1', '2', '3', '4', '11', '5', '13', '8', '6', '14', '20', '7', '15', '9', '10', '16', '17', '18', '19', '12')
  9. GROUP BY `n`.`news_id`
  10. ORDER BY `n`.`news_publish` DESC LIMIT 0, 10

i wykonuje się ono w granicach 20 sekund co jest nie do przyjęcia. W tabelach news i newstext znajduje się po około 80 tysięcy rekordów w tabeli photo jest około 40 tysięcy wpisów tabela news2photo to około 50 tysięcy rekordów.
Pytanie co zrobić żeby przyspieszyć to zapytanie do jakiegoś znośnego czasu?

Ten post edytował devnul 3.05.2008, 15:54:19
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
php programmer
post
Post #2





Grupa: Zarejestrowani
Postów: 1 045
Pomógł: 5
Dołączył: 8.11.2004
Skąd: trójmiasto

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


Wywal wszystkie JOINY,

zamiast tego zrób na początku jedno zapytanie odpowiadające głownemu zapytaniu ale
pobierające tylko id z głównej tabeli
id zbierasz w jakiejś tabeli php-owej

potem robisz osobna zapytanie dla zapytania głównego
oraz osobne zapytanie odpowiadające kazdemu JOIN
gdzie warunkiem jest id nalezace to tych zebranych w tapeli php-owej

Wyniki kazdego JOINA zapisujesz w tablicy php-owej (oczywiście innej niż ta wyżej,
osobna taliba dla kazdego JOIN), ale w taki sposób,
że indeksami są id table głównej, dzięki czemu można się potem bezpośrednio
odwoływać do danych JOIN-owych

niedawno zastowowałem tego typu rozwiązanie i bardzo pomogło
w beznadziejnej wydawałoby się sytuacji, bo danych było tyle, że
nawet jednego JOINa nie można było dodać

Ten post edytował php programmer 21.12.2007, 08:42:41
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: 12.10.2025 - 00:07