软件:Magento社区 启用平面类别索引
问题描述: 当我运行完整的URL索引时,需要很长时间才能完成,我知道在某些情况下这是正常的。这不是我要问的问题。当索引器正在运行时,块缓存会不断变为无效。发生这种情况时,Magento尝试在加入url重写表时从平面类别表重建菜单。这是文件核心的一部分 的法/目录/型号/资源/类别/ Flat.php
当索引器运行时,此查询会反复显示在mysql客户端连接中。
SELECT `main_table`.`entity_id`, main_table.`name`, main_table.`path`, `main_table`.`is_active`, `main_table`.`is_anchor`, `url_rewrite`.`request_path`, `main_table`.`url_override`, `main_table`.`display_subcategories`
FROM `catalog_category_flat_store_19` AS `main_table`
LEFT JOIN `core_url_rewrite` AS `url_rewrite` ON url_rewrite.category_id=main_table.entity_id AND url_rewrite.is_system=1 AND url_rewrite.product_id IS NULL AND url_rewrite.store_id='19' AND url_rewrite.id_path LIKE 'category/%'
WHERE (main_table.is_active = '1') AND (main_table.include_in_menu = '1') AND (main_table.path like '1/1877/%') AND (`level` <= 3)
ORDER BY `main_table`.`position` ASC
由于joinLeft,此查询非常慢。此Join在上面提到的文件中定义。当索引器运行时,此查询超时。连接在服务器上建立所有尝试运行相同查询以重建导航菜单。
如果我将查询更改为joinInner而不是joinLeft,则问题会立即消失。我不理解左连接的目的,因为我觉得它不太可能在这个表中没有值,如果没有我们可能不想显示这个类别。
我至少看到过有关此问题的其他一些报告,但在运行索引或缓存时,它们很快就会出现通用性能问题。
我不明白为什么这个查询在索引器运行时的行为会有很大不同,因为我可以在正常的时间内单独对每个表进行完全选择。只有将左连接与索引器结合才会发生此问题。了解一般来说这是一个缓慢的查询。
问题:您能否提供有关左连接的信息,为什么需要它,因为它非常慢。你能推荐一个解决方案来解决我的问题。
答案 0 :(得分:1)
发生此问题是因为在此版本的Magento中它只是一个问题查询。更高版本的社区已将此方法/查询重写为没有任何左连接。
仍然存在块缓存无效且菜单重新生成的问题,但报告的主要问题已解决。
参考函数是文件Mage / Catalog / Model / Resource / Category / Flat.php的getParentCategories