首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL-简单查询需要11秒才能返回结果

MySQL-简单查询需要11秒才能返回结果
EN

Stack Overflow用户
提问于 2020-12-21 20:12:58
回答 1查看 42关注 0票数 0

我有一个mysql查询,它从一个表(6k+记录)中获取产品,并连接另一个保存这些产品(5.5k+记录)图像的表,并在其中选择来自特定供应商的产品。下面是查询。

代码语言:javascript
复制
SELECT  *
    from  products
    LEFT JOIN  products_images  ON (products.id = products_images.product_id)
    WHERE  products.vendor_id in (
        SELECT  id
            FROM  vendors
            WHERE  status=1      ) 

我需要帮助来优化这个查询。谢谢!!

EN

回答 1

Stack Overflow用户

发布于 2020-12-21 20:14:49

EXISTS通常会生成更好的执行计划:

代码语言:javascript
复制
SELECT * 
FROM products p LEFT JOIN 
     products_images pi
     ON p.id = pi.product_id
WHERE EXISTS (SELECT 1
              FROM vendors v
              WHERE p.vendor_id = v.id AND v.status = 1
             );

您还需要product_images(product_id)vendors(vendor_id, status)上的索引。

如果我(合理地)假设idvendors中的主键,那么您也可以使用JOIN

代码语言:javascript
复制
SELECT p.*, pi.*
FROM products p JOIN
     vendors v
     ON p.vendor_id = v.id LEFT JOIN 
     products_images pi
     ON p.id = pi.product_id
WHERE v.status = 1;

对于这个版本,最好的索引可能是:vendors(status, id)products(vendor_id, product_id)product_images(product_id)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65392583

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档