我有一个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 ) 我需要帮助来优化这个查询。谢谢!!
发布于 2020-12-21 20:14:49
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)。
https://stackoverflow.com/questions/65392583
复制相似问题