2

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

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

非常感谢

4

1 回答 1

2

第二个查询可以简化为:

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

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

这假设用户表的加入没有充当过滤器(销售中的所有用户 id 都在表中并且没有重复)。

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

于 2012-08-08T19:11:18.833 回答