Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/106.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql慢速查询优化_Mysql - Fatal编程技术网

Mysql慢速查询优化

Mysql慢速查询优化,mysql,Mysql,我有一个购物车,不断记录像这样的慢查询 # Query_time: 4 Lock_time: 0 Rows_sent: 50 Rows_examined: 454403 SELECT SQL_CALC_FOUND_ROWS products.*, descr1.product AS product, Min(prices.

我有一个购物车,不断记录像这样的慢查询

# Query_time: 4  Lock_time: 0  Rows_sent: 50  Rows_examined: 454403
    SELECT SQL_CALC_FOUND_ROWS products.*, 
                           descr1.product                          AS product, 
                           Min(prices.price)                       AS price, 
                           GROUP_CONCAT(IF(products_categories.link_type = 'M', 
                           Concat(products_categories.category_id, 
                           'M'), products_categories.category_id)) AS 
                           category_ids, 
                           cscart_seo_names.name                   AS seo_name 
FROM   cscart_products AS products 
       LEFT JOIN cscart_product_descriptions AS descr1 
         ON descr1.product_id = products.product_id 
            AND descr1.lang_code = 'EN' 
       LEFT JOIN cscart_product_prices AS prices 
         ON prices.product_id = products.product_id 
            AND prices.lower_limit = 1 
       INNER JOIN cscart_products_categories AS products_categories 
         ON products_categories.product_id = products.product_id 
       INNER JOIN cscart_categories 
         ON cscart_categories.category_id = products_categories.category_id 
            AND ( cscart_categories.usergroup_ids = '' 
                   OR Find_in_set(0, cscart_categories.usergroup_ids) 
                   OR Find_in_set(1, cscart_categories.usergroup_ids) ) 
            AND cscart_categories.status IN ( 'A', 'H' ) 
       LEFT JOIN cscart_seo_names 
         ON cscart_seo_names.object_id = products.product_id 
            AND cscart_seo_names.TYPE = 'p' 
            AND cscart_seo_names.dispatch = '' 
            AND cscart_seo_names.lang_code = 'EN' 
WHERE  1 
       AND products.company_id = 0 
       AND ( products.usergroup_ids = '' 
              OR Find_in_set(0, products.usergroup_ids) 
              OR Find_in_set(1, products.usergroup_ids) ) 
       AND products.status IN ( 'A' ) 
       AND prices.usergroup_id IN ( 0, 0, 1 ) 
GROUP  BY products.product_id 
ORDER  BY descr1.product ASC 
LIMIT  1300, 50; 
在如何加快查询速度方面,我似乎无法从cart公司获得任何帮助。也许我需要添加更多的索引?我不确定,我很想得到一些帮助,为我指出解决这个问题的正确方向

谢谢


克里斯·爱德华兹(Chris Edwards)

我发现这个查询有很多问题,可能会导致速度缓慢

首先,无论您在何处使用“FIND_IN_SET”,请尝试改用IN。通过删除条件中的“或”,可以使用索引:

cscart_categories.usergroup_ids = ''
OR FIND_IN_SET(0, cscart_categories.usergroup_ids)
OR FIND_IN_SET(1, cscart_categories.usergroup_ids)
变成:

cscart_categories.usergroup_ids IN ('', '0', '1')
除此之外,请确保在联接、GROUPBY子句、where子句或排序中使用的每一列都已编制索引


另一个建议是删除“GROUP\u CONCAT”,并在另一个查询中单独选择该信息。

EXPLAIN
是您最好的朋友您对第一部分不起作用的看法是正确的……in函数将不起作用,而不是FIND\u in\u SET函数。据我所知,优化此功能的唯一其他方法是删除OR条件,并对每个where条件使用联合。