mysql多组和顺序很慢

nkhmeac6  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(291)

**结束。**此问题需要详细的调试信息。它目前不接受答案。
**想改进这个问题吗?**更新问题,使其成为堆栈溢出的主题。

两年前关门了。
改进这个问题
我正在尝试优化一个用于电子商务定制商店的mysql查询,该查询有一些内部连接和分组方式,这使得查询速度非常慢,我们正在使用它为类别、供应商、颜色等生成动态过滤器/组合。
有人知道如何优化它吗?首先,我无法使products(p)表使用多索引而不是主键,查询大约需要150-200毫秒。
确切的查询:

SELECT DISTINCT(sl.id_supplier), 
       count(DISTINCT p.id_product) as product_count, 
       sl.supplier_name, 
       sl.supplier_slug, 
       sl.supplier_link 
FROM supplier s 
INNER JOIN supplier_lang sl 
  on s.id_supplier = sl.id_supplier 
  AND sl.id_project = 6 
  AND sl.id_lang =2 
  AND s.id_project = 6 
  AND s.active = 1 
INNER JOIN product p 
  ON p.id_project = 6 
  and p.active = 1 
  AND p.id_supplier = sl.id_supplier 
INNER JOIN product_category pc 
  on pc.id_project = 6 
  and pc.id_category = 6 
  and p.id_product = pc.id_product  
GROUP by sl.id_supplier 
ORDER BY sl.supplier_name ASC

谢谢您
https://snag.gy/f6dy4r.jpg

iswrvxsc

iswrvxsc1#

虽然上面提到了一个隐式的函数依赖关系,但我认为这样的查询看起来更像这样是一个很好的实践(通常也是预期的):

SELECT sl.id_supplier
     , sl.supplier_name
     , sl.supplier_slug
     , sl.supplier_link 
     , COUNT(DISTINCT p.id_product) product_count 
  FROM supplier s 

  JOIN supplier_lang sl 
    ON sl.id_supplier = s.id_supplier 
   AND sl.id_project = s.id_project 
   AND sl.id_lang = 2 

  JOIN product p  
    ON p.id_supplier = sl.id_supplier 
   AND p.id_project = s.id_project  
   AND p.active = 1 

  JOIN product_category pc 
    ON pc.id_product = p.id_product 
   AND pc.id_project = p.id_project 
   AND pc.id_category = 6 

 WHERE s.id_project = 6 
   AND s.active = 1 

 GROUP 
    BY sl.id_supplier 
     , sl.supplier_name
     , sl.supplier_slug
     , sl.supplier_link 
 ORDER 
    BY sl.supplier_name ASC

要获得优化此查询的帮助,我们需要查看所有相关表的showcreatetable语句以及上面的解释。这将是一个编辑您的问题的形式,不会包括任何图片。

相关问题