1

SQLのいくつかのテーブルに対してデカルト積をクエリします。

問い合わせたら

SELECT * FROM TABLE1, TABLE2, ... , TABLE n   WHERE ....

それは速いかもしれません。

言うまでもなく、1〜3ヒットしかありません。

さて、さらにテーブルをクエリすると、

SELECT * FROM TABLE1, TABLE2, ... , TABLE n, TABLE n+1, ..., TABLE m   WHERE ....

それはゆっくりと崩壊します。

なんで?SQLは最後のテーブルから始めてすべての組み合わせを通過しますか?

最適化のための私の質問:

検索を最も絞り込んでフィルタリングするテーブルとしてテーブル1を選択する必要がありますか、それとも最後のテーブルmを選択する必要がありますか?

または他に何?

4

2 に答える 2

3

あなたのタイトルはそれをすべて言います-デカルト積。さまざまなテーブル間の結合条件を指定しない限り、データベース サーバーは可能なレコードのすべての組み合わせを生成しようとします。テーブルを追加すると、これは非常に急速に大きくなります。たとえば、10 = 10^5、100,000 レコードの 5 つのテーブルです。

レコード セットを絞り込むには、適切な結合手法 (左、右、内部) 結合句を使用する必要があります。

于 2012-08-13T18:55:36.023 に答える
0

複数のテーブルに参加すると、すでに3つのテーブルでも非常に遅くなります。解決策は、選択のいくつかの乗算である可能性があります

そんな感じ:

SELECT * FROM TABLE1, 
  (SELECT * FROM TABLE2, 
     (SELECT * FROM TABLE3, 
        (..)
      WHERE ..) 
   WHERE .. )
WHERE
 ... 
于 2012-08-13T18:58:16.260 に答える