Autor | Zpráva | ||
---|---|---|---|
midlan Profil |
Ahoj,
mám problém s rychlostí dotazu (resp. pohledu na něj). Jedná se o strukturu EAV, systém Magento. Dotaz vybírá několik atributů produktu pro různé obchody. Obchody jsou 4 a produktů kolem 30000, dotaz tedy vrací kolem 120000 záznamů. Nejpodivnější na všem je, že v pátek žádné problémy s rychlostí nebyly, procházení pohledu pomocí nástroje Adminer trvalo kolem 1.5s. Dnes najednou z ničeho nic kolem 40 sekund. A to jsem v pátek ještě eliminoval 3 JOINY. Navrácení v předchozí stav však stejně nepomohlo. Už jednou jsem řešil problémy s rychlostí dotazu, ale to jsem doplnil chybějící indexy podle EXPLAIN a problém se vyřešil. Kam by se měla ubírat další moje snaha optimalizace? Problémový dotaz:
CREATE OR REPLACE VIEW pohled AS SELECT CONCAT(s.store_id, '-', p.entity_id, IFNULL(CONCAT('-', l.product_id), '')) AS store_product_parent_id, p.entity_id, s.store_id, l.product_id AS parent_id, p.type_id, IFNULL(translation.value, 0) AS translation, name_pattern.value AS name_pattern, name.value AS name, short_description_pattern.value AS short_description_pattern, short_description.value AS short_description, description_pattern.value AS description_pattern, description.value AS description FROM core_store AS s INNER JOIN catalog_product_entity AS p ON (s.store_id != 1) AND (s.is_active) INNER JOIN eav_attribute AS a ON a.attribute_code = CONCAT('translation_', s.code) LEFT JOIN catalog_product_entity_int AS translation ON (translation.entity_id = p.entity_id) AND (translation.attribute_id = a.attribute_id) AND (translation.store_id = 0) LEFT JOIN catalog_product_entity_varchar AS name_pattern ON (name_pattern.entity_id = p.entity_id) AND (name_pattern.attribute_id = IF(s.store_id = 0, '185', '63')) AND (name_pattern.store_id = 0) LEFT JOIN catalog_product_entity_varchar AS name ON (name.entity_id = p.entity_id) AND (name.attribute_id = '63') AND (name.store_id = s.store_id) LEFT JOIN catalog_product_entity_text AS short_description_pattern ON (short_description_pattern.entity_id = p.entity_id) AND (short_description_pattern.attribute_id = IF(s.store_id = 0, '658', '65')) AND (short_description_pattern.store_id = 0) LEFT JOIN catalog_product_entity_text AS short_description ON (short_description.entity_id = p.entity_id) AND (short_description.attribute_id = '65') AND (short_description.store_id = s.store_id) LEFT JOIN catalog_product_entity_text AS description_pattern ON (description_pattern.entity_id = p.entity_id) AND (description_pattern.attribute_id = IF(s.store_id = 0, '657', '64')) AND (description_pattern.store_id = 0) LEFT JOIN catalog_product_entity_text AS description ON (description.entity_id = p.entity_id) AND (description.attribute_id = '64') AND (description.store_id = s.store_id) LEFT JOIN catalog_product_link AS l ON (l.link_type_id = 3) AND (l.linked_product_id = p.entity_id) ; |
||
midlan Profil |
#2 · Zasláno: 24. 5. 2016, 14:37:01
Vypadá to, že problém byl identifikován. Zřejmě je na testovacím serveru málo paměti, protože na produkci dotaz běhá rychle. Nejspíš se o víkendu nějaká paměť na testovacím serveru zaplnila, proto najednou takové markantní zhoršení.
|
||
Časová prodleva: 9 let
|
0