私は2つのテーブルに1つ約17K(NLIST
)のレコードを含み、もう1つの57K(FNAMES
)のテーブルを持っています。ハイヴァインまたはインパラでlevenshteinに参加する効率的な方法
私はlevenshtein式を使ってレコードを比較することで両方に参加したいと思います。ここ
は、テーブルのコンテンツの一例である。
表NLIST
:
+------+-------------+
| ID | S_NAME |
+------+-------------+
| 1 | Avi |
| 2 | Moshe |
| 3 | David |
....
表FNAMES
:
+------+-------------+
| ID | NICKNAMES |
+------+-------------+
| 1 | Avile |
| 2 | Dudi |
| 3 | Moshiko |
| 4 | Avi |
| 5 | DAVE |
....
上記の表は単なる例です。実際の場合、名前列には複数の単語を含めることができます。
必要な結果は次のようになります。ここでは
+------+-------------+--------+
| ID | NICKNAMES | S_NAME |
+------+-------------+--------+
| 1 | Avile | Avi |
| 2 | Dudi | David |
| 3 | Moshiko | Moshe |
| 4 | Avi | Avi |
| 5 | DAVE | David |
...
は、私が使用するコードです:
select FNAMES.NICKNAMES, NLIST.S_NAME
from NICKNAMES
LEFT OUTER JOIN NLIST
ON(true)
WHERE levenshtein (FNAMES.NICKNAMES, NLIST.S_NAME) <=4
上記のコードは非常に長い時間のために実行され、私はその実行を停止しました。
妥当な時間に実行するにはどうすればよいですか?
また、私はlevenshtein
の距離は単語の長さに依存すると思います。どのように距離の最適値を見つけることができますか(この場合、私は任意に4を選択しました)?
Avi、最初に、両方のテーブルから**個別の値**を使用しましたか? –
ありがとうございましたDudu、確かにそうでした。 NLIST表はすでに別個の表であり、FNAMES表には重複値がありません。 – Avi