2012-08-08 73 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語句中使用「,」是不好的做法。