2012-08-08 75 views
2

如何优化三重加入这样的查询的MySQL查询优化三重加入VS嵌套查询

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 

表是(* =主键)

的0
users 
*id_user | name | .... 

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

salesSpec 
id_sale | id_article | .... other values 

许多由于

+0

第一个查询不工作还是很慢? – 2012-08-08 18:56:17

回答

2

第二查询可以被简化为:

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

这应该执行比第一版本更快。一个简单的原因:它没有加入用户表。 “明显的”应该与“group by”大致相同的工作量,所以连接的差异应该是表现的主要影响。

这假定用户表的加入不作为过滤器(所有用户ID销售在表中,并且没有重复)。

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