0

は私がどこのステートメントで2選択 最初のものを持っている6テーブルから情報を選択します:WHEREまたはJOINの異なるテーブルからのSELECT?

SELECT columns 
FROM db1, 
     db2, 
     db3, 
     db4, 
     db5, 
     db6 
WHERE db1.id = $user_id 
     OR db2.user_id = $user_id 
     OR db3.user_id = $user_id 
     OR db4.user_id = $user_id 
     OR db5.user_id = $user_id 
     OR db6.user_id = $user_id 

$user_idがUSER_ID含まれているPHPの1variable`です。

2番目の選択肢はテーブルを結合し、文1:? like here 私は非常に複雑なクエリとクエリのようなものを行いますので1は、高速で便利なと私は速い結果を取得したいクリアでも

+3

6つの異なるテーブルをクロス結合することは、私に爆弾のように見える –

+0

少なくともいくつかのテーブルでは、ここでは実際に「クロスジョイン」を行っていると思います。これはあなたの意図ですか? –

+0

あなたが望むものは明確ではありません。サンプルデータと期待される結果セットを提供できますか?そして、@Prdpが6つのテーブルをクロスジョインすることについて言及したのは良い考えではありません。だから、ここであなたのアプローチについて考えてみたいかもしれません。 –

答えて

1

あなたが欲しいですこれを行うには

SELECT columns 
FROM db1 
WHERE id = $user_id 
UNION 
SELECT columns 
FROM db2 
WHERE id = $user_id 
UNION 
SELECT columns 
FROM db3 
WHERE id = $user_id 
UNION 
SELECT columns 
FROM db4 
WHERE id = $user_id 
UNION 
SELECT columns 
FROM db5 
WHERE id = $user_id 
UNION 
SELECT columns 
FROM db6 
WHERE id = $user_id 

すべての6つのテーブルのidカラムにインデックスを設定します。これにより、O(N)以上のパフォーマンスが得られます。

複数のテーブルから同じ結果を取得する場合は、UNIONの代わりにUNION ALLを入力することもできます(重複を残すなど)。 UNION ALLははるかに高速ですので、可能であれば使用してください。

あなたが持っているクエリはすべてのテーブルに参加し、O(N^6)のパフォーマンスを持ちます。

+0

は、この場合はORよりも速いですか?(私はすべてのidisにプロミスキーを持っています)? 私は次のように設計しようとしています: 高トラフィックの問題のために非常に高速なsqlを作成したいので、すべての情報を分離しようとしています。たとえば、名前テーブル(ユーザーのfirstname、lastname user_id)またはbirthdayテーブル(年月のuser_idを含みます)他の人たち:私は時々、データベース名や誕生日など特定のものから取得する必要があるため、すべてのものを分離したいと思います。高速テーブル用に設計されていないのですか?私はテーブルを結合することはSQLにとって何もないと思ったのですか?ユニオンで異なるテーブルから重いデータを取得する? – John

+0

@john - あなたのやり方が遅いです。それが私がこの答えを投稿した理由です。もう一度私に尋ねてみてください - 私はまだ同じ答えを与えます。あなたは結合をしていません - 結合には 'ON x = y'文と' JOIN'キーワードが必要です。あなたはクロスジョイントと呼ばれることをやっています。つまり、すべてのテーブルのすべての行が他のすべてのテーブルと組み合わされています。結果セットは(#行のdb1)x(#行のDB2)x ... x(db6の#行) – Hogan

+0

私のsqlデザインは遅いですか?私は多くの情報と実際に初めて私のデザインは1つのテーブル100のコラム(爆弾のような:))のようですが、それは単なるテストであり、それは良いデザインではないという多くの人のアドバイスです。なぜ私は別々の情報が必要なのでしょうか? UNIONに接続する必要がありますか?どのように私はSQLでそのような情報を設計する必要がありますか? – John

関連する問題