wdrożenia PrestaShop

optymalizacja wadliwego skryptu/zapytań

  • 1 Odpowiedzi
  • 2305 Wyświetleń

0 użytkowników i 1 Gość przegląda ten wątek.

*

Offline guliwerkids

  • Nowy
  • *
  • 7
  • 0
optymalizacja wadliwego skryptu/zapytań
« dnia: Luty 28, 2011, 08:12:09 pm »
Postprzez guliwerkids » poniedziałek, 28 lutego 2011, 21:09
Witam dostałem wiadomość ze strony serwera proszę o pomoc?oco chodzi mówią że mam wadliwy skrypt jak to rozwiązać.
Za pomoc z góry dziękuję

Proszę o usunięcie lub optymalizację wadliwego skryptu/zapytań, przetestowanie
go w lokalnym środowisku oraz przekazanie informacji o wykonanych pracach.

Wadliwe zapytanie:

# Query_time: 44.032698 Lock_time: 0.000260 Rows_sent: 3 Rows_examined: 142754
SET timestamp=1298911157;
SELECT p.*, pl.`description`, pl.`description_short`, pl.`link_rewrite`, pl.`meta_description`, pl.`meta_keywords`, pl.`meta_title`, pl.`name`, p.`ean13`,
i.`id_image`, il.`legend`, t.`rate`, m.`name` AS manufacturer_name
FROM `ps_product` p
LEFT JOIN `ps_product_lang` pl ON (p.`id_product` = pl.`id_product` AND pl.`id_lang` = 3)
LEFT JOIN `ps_image` i ON (i.`id_product` = p.`id_product` AND i.`cover` = 1)
LEFT JOIN `ps_image_lang` il ON (i.`id_image` = il.`id_image` AND il.`id_lang` = 3)
LEFT JOIN `ps_tax` t ON (t.`id_tax` = p.`id_tax`)
LEFT JOIN `ps_manufacturer` m ON (m.`id_manufacturer` = p.`id_manufacturer`)
LEFT JOIN `ps_category_product` cp ON (cp.`id_product` = p.`id_product`)
INNER JOIN `ps_category_group` ctg ON (ctg.`id_category` = cp.`id_category`)
INNER JOIN `ps_customer_group` cg ON (cg.`id_group` = ctg.`id_group`)
WHERE p.`active` = 1
AND DATEDIFF(p.`date_add`, DATE_SUB(NOW(), INTERVAL 70 DAY)) > 0
AND (cg.`id_customer` = 136 OR ctg.`id_group` = 1)
GROUP BY p.`id_product`
ORDER BY p.`date_add` DESC
LIMIT 0, 3;

*

Offline kitek

  • Nowy
  • *
  • 5
  • 0
Odp: optymalizacja wadliwego skryptu/zapytań
« Odpowiedź #1 dnia: Marzec 28, 2011, 06:38:59 pm »
Napisz co to zapytanie ma dać.
Napisz ile wierszy mają poszczególne tablice.
Bez danych to się kiepsko sprawdza.
U mnie to się wykonuje 0.0147 - 0.0254 sekund(y)

Proponuje po group by dorzuć warunek
AND p.`active` = 1
AND DATEDIFF(p.`date_add`, DATE_SUB(NOW(), INTERVAL 70 DAY)) > 0
AND (cg.`id_customer` = 136 OR ctg.`id_group` = 1)

Czyli cały where
WHERE p.`active` = 1
AND DATEDIFF(p.`date_add`, DATE_SUB(NOW(), INTERVAL 70 DAY)) > 0
AND (cg.`id_customer` = 136 OR ctg.`id_group` = 1)
GROUP BY p.`id_product`
AND p.`active` = 1
AND DATEDIFF(p.`date_add`, DATE_SUB(NOW(), INTERVAL 70 DAY)) > 0
AND (cg.`id_customer` = 136 OR ctg.`id_group` = 1)
ORDER BY p.`date_add` DESC
LIMIT 0, 3;