私は数百万のエントリを含む2つの非常に大きなテーブルを持っており、それらには同様のレコードが含まれています。したがって、TableAは、同じデータを格納するためにTableBとは異なる列構造を持つことができますが、TableAとTableBの両方にはレコードの一意のフィンガープリントの列が含まれています。同じフィンガープリントを含むTableAとTableBの共通エントリを見つける最良の方法は何ですか?同様の質問がここで数回ここで尋ねられましたが、ここに変更があります。2つの非常に大きなデータベーステーブルの共通エントリの検索
と言います。普通のエントリのpkをTableC(pk_a, pk_b, fingerprint)
に保存します。これは、TableAとTableBに共通のタプルを示します。 TableCはTableAまたはTableBにレコードが追加/削除されるたびに更新する必要があります。
私の最初の部分は、指紋が同じであるTableAとTableBの結合をTableCに追加することです。
2番目の部分については、同様の指紋の場合はTableCにクエリを行い、一致するものが見つかった場合はTableCを更新します。一致するものが見つからない場合は、指紋についてTableBをスキャンし(TableBにレコードが追加された)、TableCを更新します。
しかし、これはかなり直感的であり、na ï veです。私はそれがより良い方法で行えると感じています。
誰でも考えられますか?
最終使用は何ですか?つまり、リアルタイムでの対応が必要ですか?あるいは、挿入物のオーバーヘッドをすべて避け、真夜中にバッチ処理を実行することもできますか? – SJuan76
最終的な使用方法はさまざまです。そのインタビューの質問。バッチプロセスを実行することは非常に現実的な解決策かもしれませんが、おそらく人々は他の巧妙なメカニズムを使ってそれをやっているかもしれません。 –
さて、インタビューの中でさえ、私は、より簡潔な要求を得ることを望んでいるでしょう(幅広い再請求者 - >費用効果の低い実装)。もう1つの興味深い質問は、たとえPKでなくても結合を行う際に便利なコラムがある場合です。とにかく、私は別の答えを書いています。 – SJuan76