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

2番目のクエリは次のように簡略化できます。

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

これは、最初のバージョンよりも高速に実行されるはずです。単純な理由の1つは、usersテーブルに参加していないことです。「個別」は「グループ化」とほぼ同じ量の作業である必要があるため、結合の違いがパフォーマンスの主要な影響になるはずです。

これは、usersテーブルの結合がフィルターとして機能しなかったことを前提としています(sales内のすべてのユーザーIDがテーブルにあり、重複はありません)。

また、適切な結合構文の使用を開始する必要があります。fromステートメントでの「、」の使用は悪い習慣です。

于 2012-08-08T19:11:18.833 に答える