Php MySQL 5.5到5.7已停止使用索引
我有一个Magento 1.9.2.1。并成功运行在Apache2和MySQL 5.5上 我尝试将它迁移到另一台服务器,并使用了NGINX和MySQL 5.7 但网站开始非常慢(12秒对2秒)。 经过几个小时的调试,我发现一个查询中存在问题: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`
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
下面是语法:这是注释,不是答案