我有一个购物车,它不断记录像这样的缓慢查询……
# 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;
我似乎不能从购物车公司得到任何关于如何加速这个查询的帮助。也许我需要添加更多的索引?我不确定,我很乐意得到一些帮助,这些帮助将为我指明解决这个问题的正确方向。
谢谢,
克里斯·爱德华兹
发布于 2011-10-13 00:41:08
我发现这个查询有很多问题,可能会导致速度变慢……
首先,在使用'FIND_ IN _SET‘的任何地方,尝试使用IN。通过删除条件中的“OR”,可以使用索引:
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')
除此之外,还要确保join、group by子句、where子句或ordering中使用的每一列都被编入索引。
另一个建议是删除'GROUP_CONCAT‘,并在另一个查询中单独选择该信息。
https://stackoverflow.com/questions/7743411
复制相似问题