![]() |
![]() |
![]()
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%) ![]() ![]() |
Cytat("erix") A nie możesz po prostu wywołać dwóch zapytań? Jedno count z tymi warunkami, drugie właściwe? Myślę, że szybciej będzie. Cytat("Walian") To samo zapytanie, ale bez wyciągania danych - zamiast tego COUNT(*): Cytat 20 rows in set (6.71 sec) Jak widzisz jest jeszcze gorzej, już bardziej się opłaca z SQL_CALC_FOUND_ROWS. EXPLAIN EXTENDED: Cytat id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE u ALL PRIMARY NULL NULL NULL 892 Using where; Using temporary; Using filesort 1 SIMPLE o ref produkt_id,user_id,cena user_id 3 u.user_id 19 Using where 1 SIMPLE a eq_ref PRIMARY,category_id PRIMARY 4 o.produkt_id 1 Using where Próbowałem już wcześniej z różnymi indeksami, z pozbywaniem się filesort-a, nawet z FORCE INDEX, no ale nie wiem jak sobie z tym poradzić. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 7.10.2025 - 20:39 |