私の質問は、SQLで内部結合を使用する方法ではありません。テーブルaとテーブルbがどのように一致するかを知っています。
内部作業の内部作業はどうですか。どのようなアルゴリズムが含まれますか?複数のテーブルを結合すると、内部で何が起こりますか?
私の質問は、SQLで内部結合を使用する方法ではありません。テーブルaとテーブルbがどのように一致するかを知っています。
内部作業の内部作業はどうですか。どのようなアルゴリズムが含まれますか?複数のテーブルを結合すると、内部で何が起こりますか?
DBサーバー、インデックス、データの順序(クラスター化されたPK)、計算された値が結合されているかどうかなどに応じて、さまざまなアルゴリズムがあります。
ほとんどのSQLシステムがクエリ用に作成できるクエリプランを見てください。それが何をするのかを理解できるはずです。
MS Sql では、テーブル (テーブルのサイズ、利用可能なインデックスの種類など) に応じて、さまざまな状況でさまざまな結合アルゴリズムが使用されます。他の DB エンジンもさまざまなアルゴリズムを使用していると思います。
Ms Sql で使用される結合の主なタイプは次のとおりです。
- ネストされたループ結合
- マージ結合
- ハッシュ結合
詳細については、次のページを参照してください: Msdn -Advanced Query Tuning Concepts
クエリの「実行計画」を表示する SQL を取得すると、さまざまな状況で使用されている結合の種類を確認できます。
それは、使用しているデータベース、参加しているもの (大小、順番に/ランダム、インデックス付き/インデックスなしなど) によって異なります。
たとえば、SQL Server にはいくつかの異なる結合アルゴリズムがあります。ループ結合、マージ結合、ハッシュ結合。どちらが使用されるかは、オプティマイザが実行計画を作成するときに決定されます。判断を誤る場合があり、結合ヒントを使用して特定の結合アルゴリズムを強制することができます。
次の MSDN ページが興味深いかもしれませ
ん
。 (ハッシュ)
http://msdn.microsoft.com/en-us/library/ms190967.aspx (マージ)
http://msdn.microsoft.com/en-us/library/ms173815.aspx (ヒント)
この場合、JOINアルゴリズムを理解した後、bツリーにデータを保存する方法を確認する必要があります。
すべての集合論に基づいて、しばらく経ちました。一度に多くのテーブルをリンクしないようにしてください。すべてのスキャンでデータベースリソースが不足しているようです。インデックスはパフォーマンスに役立ち、いくつかのSQLサイトを調べ、SQLクエリの最適化を検索して洞察を得ます。SQL Management Studioには、特に大規模で複雑なクエリの場合に興味深い実行プランユーティリティが組み込まれています。
オプティマイザーは最速の結合アルゴリズムを選択します(または選択する必要があります)。
ただし、何が高速であるかを判断するには、次の2種類があります。
すべての行をできるだけ速く返したい場合、オプティマイザーはハッシュ結合またはマージ結合を選択することがよくあります。最初の数行をできるだけ速く返したい場合、オプティマイザーはネストされたループ結合を選択します。
2 つのテーブルのデカルト積を作成し、そこから行を選択します。同じことについては、データベースに関するKorthの本を読んでください。