mysql - MariaDB 上的查询非常非常慢

标签 mysql mariadb

自从我开始使用 MariaDB 10 以来,我就遇到了这个问题。查询花费太多时间。使用 MySql 5.5,他们最多需要一分钟才能获得结果集,但使用 MariaDB,我什至在 20 分钟后都看不到结果集。

这个系统运行在Magento 1.7.0.2上,但是这个问题与Magento无关,所以我没有在Magento部分下创建它。

我的服务器管理员说“服务器上一切都很好,查询在 RAM 上运行,当该查询开始运行时,CPU 利用率为 100%,如果您想改进它,您需要更改查询或增加 CPU 功率。 ”。但我很确定这与 MariaDB 和/或数据库服务器设置有关。

如果有人以前遇到过此类问题,请指导我找到正确的路径。

这是应运行以获取用于创建提要的数据的最大查询之一。

SELECT `e`.*, `at_status`.`value` AS `status`, `at_visibility`.`value` AS      
`visibility`, `at_quality_score`.`value` AS `quality_score`,    
`at_exportable_for_idealo`.`value` AS `exportable`, 
`stock`.`qty`, `stock`.`is_in_stock`, `stock`.`manage_stock`, 
`stock`.`use_config_manage_stock`, `stock`.`min_qty`, 
`stock`.`min_sale_qty`, MAX(DISTINCT request_path) AS `request_path`, 
`cpsl`.`parent_id`, `categories`.*, `categories_parent`.*, 
GROUP_CONCAT(DISTINCT categories_index.category_id) AS `categories_ids`, 
`price_index`.`min_price`, `price_index`.`max_price`, 
`price_index`.`tier_price`, `price_index`.`final_price` FROM 
`catalog_product_entity` AS `e`

INNER JOIN `catalog_product_website` AS `product_website` ON      
product_website.product_id = e.entity_id AND product_website.website_id =     
'1'

INNER JOIN `catalog_product_entity_int` AS `at_status` ON 
(`at_status`.`entity_id` = `e`.`entity_id`) AND (`at_status`.`attribute_id` 
= '96') AND (`at_status`.`store_id` = 0)

INNER JOIN `catalog_product_entity_int` AS `at_visibility` ON 
(`at_visibility`.`entity_id` = `e`.`entity_id`) AND 
(`at_visibility`.`attribute_id` = '102') AND (`at_visibility`.`store_id` = 
0)

INNER JOIN `catalog_product_entity_varchar` AS `at_quality_score` ON 
(`at_quality_score`.`entity_id` = `e`.`entity_id`) AND 
(`at_quality_score`.`attribute_id` = '313') AND 
(`at_quality_score`.`store_id` = 0)

INNER JOIN `catalog_product_entity_int` AS `at_exportable_for_idealo` ON 
(`at_exportable_for_idealo`.`entity_id` = `e`.`entity_id`) AND 
(`at_exportable_for_idealo`.`attribute_id` = '353') AND 
(`at_exportable_for_idealo`.`store_id` = 0)

LEFT JOIN `cataloginventory_stock_item` AS `stock` ON 
stock.product_id=e.entity_id

LEFT JOIN `core_url_rewrite` AS `url` ON url.product_id=e.entity_id AND 
url.target_path NOT LIKE '%category%' AND is_system=1 AND ISNULL(options) 
AND url.store_id=1

LEFT JOIN `catalog_product_super_link` AS `cpsl` ON 
cpsl.product_id=e.entity_id 

LEFT JOIN `catalog_category_product` AS `categories` ON 
categories.product_id=e.entity_id

LEFT JOIN `catalog_category_product` AS `categories_parent` ON 
categories_parent.product_id=cpsl.parent_id

LEFT JOIN `catalog_category_product_index` AS `categories_index` ON 
((categories_index.category_id=categories.category_id AND 
categories_index.product_id=categories.product_id) OR 
(categories_index.category_id=categories_parent.category_id AND 
categories_index.product_id=categories_parent.product_id )) AND 
categories_index.store_id=1

LEFT JOIN `catalog_product_index_price` AS `price_index` ON 
price_index.entity_id=e.entity_id AND customer_group_id=0 AND 
price_index.website_id=1 WHERE (at_status.value = '1') AND (`e`.`type_id` 
IN('simple')) AND (at_visibility.value IN('1')) AND (`e`.`attribute_set_id` 
IN('19', '13', '4')) AND ((at_quality_score.value = 'A')) AND 
((at_status.value = '1')) AND ((at_exportable_for_idealo.value = '1'))

正如我所说,即使 20 分钟后我也看不到结果!没有抛出异常,没有 sql 错误日志,没有 php 错误日志,什么也没有。即使我直接在 PhpMyAdmin 上运行它,结果也是完全相同的。

提前致谢。

最佳答案

我没有遇到此类问题,但我确信如果您使用子查询编写联接,那么它会优化

而不是这个

内部连接 ​​catalog_product_website AS product_website ON
Product_website.product_id = e.entity_id AND Product_website.website_id =
'1'

这样写

内连接 (从catalog_product_website中选择* Product_website.website_id = '1') 作为临时值 开
temp.product_id = e.entity_id

如果您在所有联接中更改此设置,则执行查询所需的时间会更少。

关于mysql - MariaDB 上的查询非常非常慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34335259/

相关文章:

mysql - 如何将特定的 SELECT 命令与 UPDATE - SQL 结合起来

mysql - 加入返回不正确的值

如果某个值不存在,MYSQL 15 分钟后删除记录

mysql - XAMPP 中是否有 MariaDB 或 MySQL?

mysql - 根据时间戳过滤大量行

mysql - Google 应用引擎 - 将网站用户表从数据存储迁移到 mysql (CloudSQL)

mysql - 基于 'IN' 顺序的订单值 - MySQL

mysql - SQLSTATE [HY000] : General error: 1835 Malformed communication packet on LARAVEL

docker - 无法在 Dockerfile 中构建 mariaDB 基础

mariadb - 无法创建 MariaDB Galera 集群