0

わかりました、問題は次のようになります。ncolumn が空のデータベース行のセットがありますposition。そのセット(3つの分離された列から)の住所データ(異なる組み合わせなど-問題ではない)を使用して、それらを別のm要素のセット(これも住所データと必要な場所を含むデータベースから)と比較する必要があります。

これらのセットは非常に大きい (約 100 万件のレコードであり、操作は頻繁に実行される) ため、これら 2 つのセットを比較して必要なデータを見つけるには、非常に高速なアルゴリズムが必要です。

何かを見つけようとしましたが、それがよく知られた数学の問題であるかどうかはわかりません (グラフ理論でしょうか?)。

[編集]

構造は大きすぎてここでは説明できません。しかし、私はそのための例を作ります。

1を設定します。

|[ID] | [CITY] | [STREET] | [POSTCODE] | [LOCATION] |
|-----|--------|----------|------------|------------|
| 1   | City1  | Street1  | 00000      | NULL       |
| 2   | City2  | Street2  | 11111      | NULL       |
| 3   | City3  | Street3  | 22222      | NULL       |

2 を設定します。

|[ID] | [SOME_KIND_OF_ADDRESS]              | [LOCATION] |
|-----|-------------------------------------|------------|
| 1   | Street 1 in City 1, 00000 blah blah | SOME_XY1   |
| 2   | Street 2 in City 1, 00001 blah blah | SOME_XY2   |
| 3   | Street 2 in City 2, 11111 blah blah | SOME_XY3   |
| 4   | Street 1 in City 4, 33333 blah blah | SOME_XY4   |

の各要素についてSet 1、 で何かを見つけようとしますSet 2。この場合のみCity2, Street2andCity1, Street1が一致します。したがって、結果は次のようになります。

|[ID] | [CITY] | [STREET] | [POSTCODE] | [LOCATION] |
|-----|--------|----------|------------|------------|
| 1   | City1  | Street1  | 00000      | SOME_XY1   |
| 2   | City2  | Street2  | 11111      | SOME_XY3   |
4

2 に答える 2

2

これを行う適切な方法は、セット 2 のアドレスを解析してから、各フィールドにインデックスを作成することです。その後、比較は非常に高速になります。

それがなければ、あなたの選択肢は何ですか?基本的に、比較のためにセット 2 のすべてのアドレスをスキャンする必要があります。一部の SQL エンジンは、文字列の先頭で (インデックスを使用して) 比較を最適化するため、1 つの比較でインデックスを使用できます。通り/都市/郵便番号を抽出する関数がある場合、一部のデータベースは、要素が関数呼び出しの結果である「関数」インデックスをサポートできます。

別のオプションは全文検索です。これにより、逆索引と呼ばれる構造を使用してコンポーネントを検索できます。

ただし、私のアドバイスは、アドレスを修正して、比較したい部分を抽出することです。アドレス修正/標準化は、安価でも高速でもありませんが、通常、このような要求を大幅に簡素化することで、中期的には元が取れます。

于 2013-03-22T13:52:59.940 に答える
0

次のアルゴリズムを使用します。

  1. テーブル A、B を並べ替える
  2. テーブルの先頭に 2 つのポインター (ptrA、ptrB) を作成します。
  3. While (ptrA が終了しておらず、ptrB が終了していない)

{

if (ptrA->value=ptrB->value) update column position
if (ptrA->value>ptrB->value) move prtB forward
else move ptrA forward

}

于 2013-03-22T12:03:00.097 に答える