慢MySQL离开了连接查询

时间:2012-05-30 15:49:07

标签: mysql

我有以下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)

但是,在我的测试中,这个查询非常慢。我有什么选择来改进它?

3 个答案:

答案 0 :(得分:4)

在所有这些表格的productidid字段中使用索引。如果我们有加入字段的索引,JOIN将提供性能。

答案 1 :(得分:2)

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

答案 2 :(得分:1)

使用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上添加索引。 (正如其他人所说)