MySQL-Simple Query 需要 11 秒才能返回结果

Posted

技术标签:

【中文标题】MySQL-Simple Query 需要 11 秒才能返回结果【英文标题】:MySQL-Simple Query take 11 seconds to return results 【发布时间】:2020-12-21 12:12:58 【问题描述】:

我有一个 mysql 查询,它从一个表(6k+ 记录)中获取产品,并加入另一个包含这些产品(5.5k+ 记录)图像的表,并在其中选择从特定供应商那里选择产品。以下是查询。

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      ) 

我需要有关优化此查询的帮助。谢谢!!

【问题讨论】:

【参考方案1】:

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

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

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)

【讨论】:

是的 id 是供应商表中的主键。 这意味着你不关心值,你只想显示行。 @MajidAli 。 . .如果在子查询中返回任何 rowsexists 子句将返回 true。列无关紧要。 “1”易于输入,不会产生误导。

以上是关于MySQL-Simple Query 需要 11 秒才能返回结果的主要内容,如果未能解决你的问题,请参考以下文章

WordPress 中自定义 wp_query 的分页需要 404 错误页面

Oracle Sql Query 需要一天的时间才能使用 dblink 返回结果

Oracle Query 查找总大小、消耗量和可用大小,包括各种模式 11g

如果我使用 Redux Toolkit 和 RTK-Query,需要 thunk 吗?

11如何开启慢日志查询?

XML query() 有效,value() 需要找到单例 xdt:untypedAtomic