Php MySQL 5.5到5.7已停止使用索引

Php MySQL 5.5到5.7已停止使用索引,php,mysql,magento,Php,Mysql,Magento,我有一个Magento 1.9.2.1。并成功运行在Apache2和MySQL 5.5上 我尝试将它迁移到另一台服务器,并使用了NGINX和MySQL 5.7 但网站开始非常慢(12秒对2秒)。 经过几个小时的调试,我发现一个查询中存在问题: SELECT `main_table`.`entity_id`, `main_table`.`name`, `main_table`.`path`, `main_table`.`is_active`, `main_table`

我有一个Magento 1.9.2.1。并成功运行在Apache2和MySQL 5.5上

我尝试将它迁移到另一台服务器,并使用了NGINX和MySQL 5.7

但网站开始非常慢(12秒对2秒)。 经过几个小时的调试,我发现一个查询中存在问题:

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/2/%')
ORDER BY
   `main_table`.`position` ASC;
在解释时,我发现没有使用索引。在旧的MySQL 5.5服务器上,explain命令显示正在使用的索引。一旦我强制使用索引,新服务器将在0.01秒而不是10秒内应答。但我认为更改magento代码的源文件不是一个好主意


有没有办法强迫MySQL 5.7在索引选择方面以与5.5类似的方式工作?

不幸的是,只有MySQL从5.7降级到5.5,我才解决了类似的问题。

对于像我今天这样搜索这个的任何人,有一个简单的修复程序可以应用于app/code/core/Mage/Catalog/Helper/Category/Url/rewrite.php
这里有详细信息-

我已经自己解决了这个问题。通过编辑Magento的源代码,可以在查询中使用索引。这是一个非常难看的解决方案,但它很有效。你能展示你的解决方案吗?这是很久以前的事了,我现在找不到它,但你可以想象,它就像:
Select a.*from tableName a use index index index name
下面是语法:这是注释,不是答案