私の質問は、SQLで内部結合を使用する方法ではありません。私はそれがテーブルaとテーブルbの間でどのように一致するかについて知っています。クエリを実行するためにSQLエンジンが実行する手順は何ですか?
内部作業の内部作業はどのようになっているのですか。それにはどんなアルゴリズムが関係しています複数のテーブルを結合すると内部的にはどうなりますか?
私の質問は、SQLで内部結合を使用する方法ではありません。私はそれがテーブルaとテーブルbの間でどのように一致するかについて知っています。クエリを実行するためにSQLエンジンが実行する手順は何ですか?
内部作業の内部作業はどのようになっているのですか。それにはどんなアルゴリズムが関係しています複数のテーブルを結合すると内部的にはどうなりますか?
この場合、JOINアルゴリズムを理解すると思うと、b-treeにデータを保存する方法がわかります。
は、DBサーバに応じて、異なるアルゴリズムがあり、インデックスとデータ順(クラスタ化されたPK)、計算された値は、参加しているか否かなど
持っているクエリプラン、ほとんどのSQLシステムはできる見クエリを作成すると、それが何をしているのかが分かるはずです。
MS Sqlでは、テーブル(サイズ、利用可能なインデックスの種類など)によって異なる結合アルゴリズムが使用されます。他のDBエンジンもさまざまなアルゴリズムを使用していると思います。 MS SQLで使用される結合の
主なタイプは次のとおりです。
- ネストされたループが
に参加する - マージは
に参加する - ハッシュが
に参加するあなたは、このページにそれらについての詳細を読むことができます:Msdn -Advanced Query Tuning Concepts
をクエリに「実行計画」を表示するようにSQLを取得すると、さまざまな状況で使用されている結合のタイプを確認できます。
使用しているデータベース、参加しているもの(大/小、順不同、インデックス/非インデックスなど)によって異なります。
たとえば、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(ヒント)
すべてのベース集合論、 。 一度に多数のテーブルをリンクしないようにしてください。すべてのスキャンでデータベースリソースを補うようです。インデックスはパフォーマンスの向上に役立ちます。いくつかのSQLサイトを見て、SQLクエリを最適化していくつかの洞察を得るために検索します。 SQL Management Studioには、特に大規模な複雑なクエリの場合、しばしば面白い実行計画ユーティリティがいくつか組み込まれています。
オプティマイザは、最速の結合アルゴリズムを選択します(または選択する必要があります)。
はしかし速いが何であるかを決定するための2種類があります。
可能な限り高速にすべての行を戻したい場合、オプティマイザはしばしばハッシュ結合またはマージ結合を選択します。できるだけ早く最初の数行を返す場合は、ネストされたループ結合を選択します。
どのような記事で始まる? – henry
どのDBエンジンですか? – Lucero
好ましくはMySql – henry