【发布时间】:2019-01-13 04:28:16
【问题描述】:
我正在尝试优化用于电子商务的 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
谢谢
【问题讨论】:
-
请注意,DISTINCT 不是函数。此外,假设您永远不会将它与聚合函数一起使用是相当安全的,除非您第二次使用。
-
您通常按您选择的列进行分组,除了那些作为设置函数的参数的列。
-
另外,奇怪的是所有 id_projects 都应该是 6,而您却选择不将数据与该事实联系起来。
标签: mysql sql inner-join