ハッシュ・ジョインとマージ・ジョイン、特にOracle RDBMSにおけるパフォーマンス・ゲイン/ロスとは何ですか?ハッシュ結合とマージ結合(Oracle RDBMS)の違いは何ですか?
答えて
「ソート・マージ」結合は、結合する2つのデータ・セットを結合キーに従ってソートし、それらを一緒にマージすることによって実行されます。マージは非常に安いですが、特にソートがディスクにこぼれた場合、ソートは非常に高価になる可能性があります。索引走査を介して表のブロックの割合を高くすることは、全表走査と比較して非常に高価になる可能性があるが、索引を介してデータセットのうちの1つをソート順でアクセスすることができるならば、ソートのコストを下げることができる。
ハッシュ結合は、結合列に基づいて1つのデータセットをメモリにハッシュし、もう1つを読み取り、一致するかどうかをハッシュテーブルで調べることによって実行されます。ハッシュ・テーブルがメモリ内に完全に保持され、総コストがデータ・セットを読み取るコストよりもわずかしか高くない場合、ハッシュ・ジョインは非常に低コストです。ハッシュ・テーブルを1パス・ソートでディスクに流す必要がある場合はコストが高くなり、マルチパス・ソートの場合はかなり高くなります。
ハッシュジョインのコストは、両方のテーブルをジョインキーで分割することで削減できます。これにより、オプティマイザはあるテーブルのパーティションの行が他のテーブルの特定のパーティション内で一致するものだけを見つけ出し、n個のパーティションを持つテーブルでは、ハッシュ結合をn個の独立したハッシュ結合として実行することができます。
- 各ハッシュテーブルのサイズが小さくなり、必要なメモリの最大量が減り、一時的なディスク領域が必要になる可能性があります。
- 並列クエリ操作では、各ハッシュ結合を1組のPQプロセスで実行できるため、プロセス間メッセージングの量が大幅に削減され、CPU使用率が低下し、パフォーマンスが向上します。
- 非パラレル問合せ操作では、メモリー要件がn倍に減少し、最初の行は問合せから先に投影されます。
ハッシュ結合は、等結合のみで使用できますが、結合結合はより柔軟性があることに注意してください。
一般に、等価結合で大量のデータを結合する場合、ハッシュ結合がより良い方法になります。
このトピックは、ドキュメントで詳しく説明されています。
http://download.oracle.com/docs/cd/B28359_01/server.111/b28274/optimops.htm#i51523
私は、この質問に回答したときにoracleのタグが追加されていないことを後のために編集したいだけです。私の応答はMS SQLにもっと適用されました。
マージ・ジョインは、順序付けを利用するので可能です。その結果、ジョインを行うためにテーブルを1回パスする必要があります。主キーやそのキーのテーブルのインデックスなどの順序が同じ2つのテーブル(またはカバリングインデックス)がある場合、そのアクションを実行するとマージ結合が行われます。
ハッシュ結合は、一方の表が比較的少数の項目を持つときに通常行われるように、通常は行ごとにハッシュ付きの一時表を作成し、次に連続して検索して結合を作成するときに行われるため、
最悪のケースは順序(n * m)であり、利用する順序やサイズがないことを意味し、結合は単純に、テーブルxの各行について、結合のためのテーブルyを検索することです。
- 1. SQL Server 2008のネストループ結合とハッシュ結合の相違点
- 2. SQLAlchemyハッシュ結合
- 3. Linq:結合で==と等号の違いは何ですか?
- 4. OneToMany - 結合テーブルと外部キーの違いは何ですか?
- 5. 条件との結合とサブクエリ(フィルタ)との結合の違い
- 6. oracleの内部結合と等結合の違いは何ですか?また、次の問合せのどれが高性能を提供しますか?
- 7. Observablesの結合/マージ
- 8. 2つのSQL結合表記の違いは何ですか?
- 9. 2つのTSQL結合の違いは何ですか?
- 10. MySQLのコンマ区切り結合と結合構文の違いは何ですか?
- 11. Oracle:この結合の問題点は何ですか?
- 12. Oracleの結合テーブル
- 13. anglejの片方向結合と2方向結合の違い
- 14. 内部結合と列結合の違い
- 15. OracleビューとOracleのテーブルの結合
- 16. Oracleでの左結合
- 17. 古いOracle結合をANSI SQL結合に変換する
- 18. クエリ結合の違い
- 19. Oracle SQLでのパラメータと結合
- 20. ハッシュテーブルへの結合/マージC#
- 21. Backbone.jsでハッシュとハッシュ以外のURLを結合する
- 22. Oracle外部結合 - パフォーマンス
- 23. カンマとSQLの結合の違い
- 24. 内部結合VS内部の内部結合の違い
- 25. スイッチングとの結合結合
- 26. oracle sqlの外部結合
- 27. Oracle動的パーティションの結合
- 28. Oracle:複数の結合
- 29. キャッシュメモリと密結合メモリの違い
- 30. data.tableでの等結合とローリング結合
http://download.oracle.com/docs/cd/B28359_01/server.111/b28274/optimops.htm#i76073 –
http://www.orafaq.com/node/1446 – cagcowboy
http://use-the-index-luke.com/sql/join –