繁体   English   中英

缓慢的MySQL左联接查询

[英]Slow MySQL left join query

我有以下3个MySQL表(显示为table_name:column_list):

tbl_product: id, name
tbl_sales: productid, date
tbl_impressions: productid, date

tbl_products商店购买产品,tbl_sales存储产品和tbl_impressions门店每个销售每个产品的印象。 我想查找已售出或展示过的产品。 我对此的尝试查询是:

SELECT prod.name
FROM tbl_product prod
LEFT JOIN tbl_sales sales ON sales.productid=prod.id
LEFT JOIN tbl_impressions imp ON imp.productid=prod.id
WHERE (sales.productid IS NOT NULL) OR (imp.productid IS NOT NULL)

但是,在我的测试中,此查询非常慢。 我有什么选择可以改善它?

在所有这些表的productidid字段上使用索引。 如果我们在连接字段上有索引,则JOIN将提高性能。

SELECT name FROM tbl_product INNER JOIN tbl_sales ON id = productid
UNION
SELECT name FROM tbl_product INNER JOIN tbl_impressions ON id = productid

使用EXISTS代替您的LEFT JOIN应该会有所帮助。

SELECT prod.name
FROM tbl_product prod
WHERE EXISTS ( SELECT 1 FROM tbl_sales sales WHERE sales.productid = prod.id )
   OR EXISTS ( SELECT 1 FROM tbl_impressions imp WHERE imp.productid = prod.id )

确保在tbl_sales.productidtbl_impressions.productid上添加索引。 (如其他人所说)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM