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)
上的索引。
如果我(合理地)假设id
是vendors
中的主键,那么您也可以使用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 。 . .如果在子查询中返回任何 rows,exists
子句将返回 true。列无关紧要。 “1”易于输入,不会产生误导。以上是关于MySQL-Simple Query 需要 11 秒才能返回结果的主要内容,如果未能解决你的问题,请参考以下文章
WordPress 中自定义 wp_query 的分页需要 404 错误页面
Oracle Sql Query 需要一天的时间才能使用 dblink 返回结果
Oracle Query 查找总大小、消耗量和可用大小,包括各种模式 11g