我注意到一个特殊的性能问题,我不确定如何处理.
我正在将Web应用程序从一台服务器迁移到另一台服务器,其规格非常相似.新服务器通常优于旧服务器.
旧服务器正在运行MySQL 5.6.35
新服务器正在运行MySQL 5.7.17
新旧服务器都具有几乎相同的MySQL配置.新旧服务器都运行完全相同的完全相同的数据库.
有问题的Web应用程序是Magento 1.9.3.2.
在Magento中,以下功能
Mage_Catalog_Model_Category::getChildrenCategories()
旨在列出给定特定类别的所有直接子类别.
在我的例子中,这个函数最终冒泡到这个查询:
SELECT `main_table`.`entity_id`
, main_table.`name`
, main_table.`path`
, `main_table`.`is_active`
, `main_table`.`is_anchor`
, `url_rewrite`.`request_path`
FROM `catalog_category_flat_store_1` 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.store_id = 1
AND url_rewrite.id_path LIKE 'category/%'
WHERE (main_table.include_in_menu = '1')
AND (main_table.is_active = '1')
AND (main_table.path LIKE '1/494/%')
AND (`level` <= 2)
ORDER BY `main_table`.`position` ASC;
Run Code Online (Sandbox Code Playgroud)
虽然此查询的结构对于任何Magento安装都是相同的,但Magento安装到Magento安装之间的值与该功能正在查看的类别之间显然会有轻微差异.
我的catalog_category_flat_store_1
表有214行.
我的url_rewrite
表有1,734,316行.
这个查询,当它自己直接执行到MySQL时,在MySQL版本之间执行的方式差异很大.
我正在使用SQLyog来分析此查询.
在MySQL 5.6中,上述查询在0.04秒内执行.此查询的配置文件如下所示:https://codepen.io/Petce/full/JNKEpy/ …