MySQL查询优化三重连接与嵌套选择

时间:2012-08-08 18:52:03

标签: mysql sql optimization select join

如何优化这样的三连接查询

select users.id_user from users,sales,specSales where users.id_user=sales.id_user AND sales.id_sale=specSales.id_sale AND specSales.id_article=34 group by id_user

我想要购买由id_article = X

标识的产品的不同用户

我已经想到了这一点,但我不确定改进

select id_user from (select distinct(sales.id_user) from sales,specSales where sales.id_sale=specordine.id_sale and specSale.id_article=34)as t

表是(* =主键)

users
*id_user | name | ....

sales
*id_sale | id_user | .... other values

salesSpec
id_sale | id_article | .... other values

很多谢谢

1 个答案:

答案 0 :(得分:2)

第二个查询可以简化为:

select distinct(sales.id_user)
from sales join
     specSales 
     on sales.id_sale=specordine.id_sale
where specSale.id_article=34

这应该比第一个版本执行得更快。一个简单的原因:它没有加入users表。 “distinct”应与“group by”的工作量大致相同,因此连接的差异应该是对性能的主要影响。

这假设用户表的加入不是一个过滤器(所有用户ID都在表中,并且没有重复)。

此外,您应该开始使用正确的连接语法。在from语句中使用“,”是不好的做法。