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.
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? |
|
|
|
![]() |
Post
#2
|
|
|
Grupa: Zarejestrowani Postów: 124 Pomógł: 1 Dołączył: 13.07.2009 Ostrzeżenie: (0%)
|
Ale jak niby taki cache zrobić? Nie widzę tu sensu, skoro najmniejsza zmiana w filtrze, przejście do innej kategorii, czy wyszukiwanie wg jakieś frazy zmienia już postać i ilość wyników. Po stronie serwera też nie ma sensu bo powstanie olbrzymia ilość plików cache. Jeśli do tego uwzględnić fakt, że ciągle są dodawane lub aktualizowane produkty to liczba "kombinacji" jest olbrzymia.
Wyciąłem kolumny, które nie biorą udziału w zapytaniu. Zresztą jest ich od cholery... Wiem, wiem - tragedia... ale muszę to jakoś przyspieszyć ;/ |
|
|
|
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
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 ![]() ![]() |
|
Aktualny czas: 27.12.2025 - 18:09 |