2009-05-08 16 views
9

私の質問は、SQLで内部結合を使用する方法ではありません。私はそれがテーブルaとテーブルbの間でどのように一致するかについて知っています。クエリを実行するためにSQLエンジンが実行する手順は何ですか?

内部作業の内部作業はどのようになっているのですか。それにはどんなアルゴリズムが関係しています複数のテーブルを結合すると内部的にはどうなりますか?

答えて

0

この場合、JOINアルゴリズムを理解すると思うと、b-treeにデータを保存する方法がわかります。

2

は、DBサーバに応じて、異なるアルゴリズムがあり、インデックスとデータ順(クラスタ化されたPK)、計算された値は、参加しているか否かなど

持っているクエリプラン、ほとんどのSQLシステムはできる見クエリを作成すると、それが何をしているのかが分かるはずです。

+0

どのような記事で始まる? – henry

+0

どのDBエンジンですか? – Lucero

+0

好ましくはMySql – henry

-2

2つのテーブルのデカルト積を作成し、そこから行を選択します。データベースについてのKorthの本を読んでください。

+4

私はかなり真実ではない、デカルト製品を生産することは非常に非効率であると確信しています – codeulike

+0

私はこれがKorthによって書かれた本にあると確信しています。現代のデータベースはそうしないかもしれない。 – Geek

+1

参加する前に計算できない条件で完全外部結合を行うと、これは*起こる可能性があります*。しかし、内部結合の場合、あまりにも多くのレコードが得られるので、それはあまり意味がありません。 – Lucero

2

MS Sqlでは、テーブル(サイズ、利用可能なインデックスの種類など)によって異なる結合アルゴリズムが使用されます。他のDBエンジンもさまざまなアルゴリズムを使用していると思います。 MS SQLで使用される結合の

主なタイプは次のとおりです。
- ネストされたループが
に参加する - マージは
に参加する - ハッシュが

に参加するあなたは、このページにそれらについての詳細を読むことができます:Msdn -Advanced Query Tuning Concepts

をクエリに「実行計画」を表示するようにSQLを取得すると、さまざまな状況で使用されている結合のタイプを確認できます。

+0

あなたはどのアルゴリズムに光を当てることができますか? – Geek

+0

私の答えにmsdnリンクを参照してください。そのページは、SQLがそれぞれの場合に従う基本的なアルゴリズムを概説する3つの「理解...」ページにリンクしています。 – codeulike

2

使用しているデータベース、参加しているもの(大/小、順不同、インデックス/非インデックスなど)によって異なります。

たとえば、SQL Serverにはいくつかの異なる結合アルゴリズムがあります。ループジョイン、マージジョイン、ハッシュジョイン。どちらが使用されるかは、実行計画を立てているときにオプティマイザによって決定されます。時には誤判定となり、結合ヒントを使用して特定の結合アルゴリズムを強制することができます。

あなたが面白い次のMSDNのページを見つけることがあります。
http://msdn.microsoft.com/en-us/library/ms191318.aspx(ループ)
http://msdn.microsoft.com/en-us/library/ms189313.aspx(ハッシュ)
http://msdn.microsoft.com/en-us/library/ms190967.aspx(マージ)しばらくの周りされて
http://msdn.microsoft.com/en-us/library/ms173815.aspx(ヒント)

0

すべてのベース集合論、 。 一度に多数のテーブルをリンクしないようにしてください。すべてのスキャンでデータベースリソースを補うようです。インデックスはパフォーマンスの向上に役立ちます。いくつかのSQLサイトを見て、SQLクエリを最適化していくつかの洞察を得るために検索します。 SQL Management Studioには、特に大規模な複雑なクエリの場合、しばしば面白い実行計画ユーティリティがいくつか組み込まれています。

0

オプティマイザは、最速の結合アルゴリズムを選択します(または選択する必要があります)。

  1. あなたはそれがすべて結合された行を返すのにかかる時間を測定:

    はしかし速いが何であるかを決定するための2種類があります。

  2. 最初の行を返すのにかかる時間を測定します。

可能な限り高速にすべての行を戻したい場合、オプティマイザはしばしばハッシュ結合またはマージ結合を選択します。できるだけ早く最初の数行を返す場合は、ネストされたループ結合を選択します。

関連する問題