如何解决MySQL-Simple Query 需要 11 秒返回结果
我有一个 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 )
我需要有关优化此查询的帮助。谢谢!!
解决方法
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)
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。