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

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

非常感谢

最佳答案

第二个查询可以简化为:

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 a in sales都在表中,并且没有重复项)。
另外,您应该开始使用正确的连接语法。在from语句中使用“,”是不好的做法。

关于mysql - MySQL Queries Optimization三重联接与嵌套选择,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11871206/

10-13 08:59