Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Powolne przeglądanie produktów
Walian
post
Post #1





Grupa: Zarejestrowani
Postów: 124
Pomógł: 1
Dołączył: 13.07.2009

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


Witam,

Pracuję nad pewnym serwisem internetowym (niestety nie wolno mi podawać nazwy ani adresu), który zaczyna już dość mocno zwalniać. W chwili obecnej problem stanowią dwie tabele:
- tabela produktów - MyISAM, ponad 700 tyś rekordów, ponad 180 MB.
- tabela ofert do produktów - MyISAM, ponad 1 125 000 rekordów, ponad 230 MB.

Do rzeczy - problem stanowi już samo przeglądanie produktów.
  1. SELECT
  2. SQL_NO_CACHE
  3. SQL_CALC_FOUND_ROWS
  4. `p`.`produkt_id`,
  5. `p`.`name`,
  6. `p`.`katalog`,
  7. `p`.`pod_katalog`,
  8. `p`.`category_id`,
  9. `o`.`user_id`,
  10. `o`.`cena`,
  11. `o`.`id` AS `id_offer`
  12. FROM
  13. `produkty` `p`
  14. INNER JOIN
  15. `oferty` `o`
  16. ON
  17. `o`.`produkt_id`=`p`.`produkt_id`
  18. LEFT JOIN
  19. `uzytkownicy` `u`
  20. ON
  21. `u`.`user_id`=`o`.`user_id`
  22. WHERE
  23. `u`.`aktywny`=1 ; Tu waskie gardlo...
  24. ; W chwili obecnej wszyscy maja "1", ale TO sie kiedys zmieni...
  25. AND
  26. `p`.`category_id` IN (tutaj 176 numerow (cale drzewko) kategorii)
  27. AND ; Od tego momentu rozne filtry:
  28. `o`.`cena` BETWEEN 1 AND 99999
  29. ORDER BY
  30. `p`.`name` ASC ; Zamiast tego moze sie pojawic sortowanie wg ceny
  31. LIMIT 0,20

Cytat
20 rows in set (9.70 sec)

Bez SQL_CALC_FOUND_ROWS:
Cytat
20 rows in set (6.63 sec)

To samo zapytanie, ale bez wyciągania danych - zamiast tego COUNT(*):
Cytat
20 rows in set (6.71 sec)

Teraz wracając do początku:
Bez "`u`.`aktywny`=1":
Cytat
20 rows in set (1.86 sec)

Bez "`u`.`aktywny`=1" oraz bez "ORDER BY `p`.`name` ASC":
Cytat
20 rows in set (1.16 sec)

Bez "`u`.`aktywny`=1" oraz bez "`o`.`cena` BETWEEN 1 AND 99999" oraz bez "ORDER BY `p`.`name` ASC":
Cytat
20 rows in set (1.07 sec)

Ostatnie zapytanie, ale bez SQL_CALC_FOUND_ROWS:
Cytat
20 rows in set (0.00 sec)


Serwis stoi na serwerze dedykowanym...

Jak przyspieszyć to zapytanie? Nie mogę zrezygnować z tych warunków WHERE, ale może da radę jakoś inaczej zapytanie skonstruować?
Przejście na InnoDB pomoże czy rozwiązania trzeba szukać gdzie indziej?
Go to the top of the page
+Quote Post

Posty w temacie
- Walian   Powolne przeglądanie produktów   17.08.2010, 11:01:14
- - erix   A nie możesz po prostu wywołać dwóch zapytań? Jedn...   17.08.2010, 11:11:48
- - nospor   zrob z tego zapytania EXPLAIN i zobacz na czym mul...   17.08.2010, 11:12:02
- - Walian   Cytat("erix")A nie możesz po prostu wywo...   17.08.2010, 11:27:08
- - erix   Huh, nie zauważyłem... Pokaż lepiej [SQL] pobier...   17.08.2010, 11:28:54
- - Walian   Ale jak niby taki cache zrobić? Nie widzę tu sensu...   17.08.2010, 11:39:50
- - erix   CytatWyciąłem kolumny, które nie biorą udziału w z...   17.08.2010, 11:56:52
- - wookieb   Daj całe create table (nie usuwaj "zbędnych...   17.08.2010, 12:01:59
- - Walian   Gdybym projektował ten serwis od początku to tak w...   17.08.2010, 12:08:13
- - kaminskp   Sugeruję zastosowanie AJAX on szybko dłubie w dany...   17.08.2010, 12:11:49
- - erix   CytatNie ma to żadnego znaczenia w tym zapytaniu C...   17.08.2010, 12:13:02
- - Walian   [SQL] pobierz, plaintext CREATE TABLE `produkty` ...   17.08.2010, 12:17:04
- - wookieb   Cytat(kaminskp @ 17.08.2010, 13:11:49...   17.08.2010, 12:19:10
- - erix   Na próbę - przenieś kolumny varchar/text (tyle, il...   17.08.2010, 12:23:43
- - wookieb   Niestety MyIsam słabo spisuje się w operacjach złą...   17.08.2010, 12:39:31
- - Walian   Stworzyłem nawet nieco mniejszą tabelkę dla testu:...   17.08.2010, 12:41:42
- - dr_bonzo   Hmm, indeksy na kolumnach zlaczen są. Robisz LEFT...   17.08.2010, 13:10:57
- - Walian   Nie kumam - jeśli nie LEFT JOIN to co? Cytatbo jes...   17.08.2010, 13:44:53
- - VegetaSSJ   a wiedziałeś o tym że: [SQL] pobierz, plaintext `...   17.08.2010, 14:32:31
- - dr_bonzo   CytatNie kumam - jeśli nie LEFT JOIN to co? To INN...   17.08.2010, 14:37:27
- - Walian   Oczywiście, że wiem o tym, sęk w tym, iż numery ni...   17.08.2010, 14:38:22
- - mkozak   Przy takiej dużej ilości kluczy i kolumn w userach...   17.08.2010, 15:56:57
- - dr_bonzo   @mkozak: Ciekawe, twoje zapytanie daje: Kodid sel...   17.08.2010, 16:01:54
- - Walian   Cytat("mkozak")Przy takiej dużej ilości ...   17.08.2010, 17:16:31
|- - mkozak   Cytat(Walian @ 17.08.2010, 17:16:31 )...   17.08.2010, 17:29:12
- - Walian   Wprowadziłem nowe zapytanie + nowy indeks i wydaje...   18.08.2010, 11:05:17
- - mkozak   To już zależy od tego jak często zmienia się statu...   18.08.2010, 11:20:15
- - Walian   Status będzie się zmieniał co miesiąc - lub późnie...   18.08.2010, 12:34:35


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: 22.08.2025 - 11:50