データベースの列に文字列で表が作成されています。私は、バインドされた変数で列のハミング距離を計算し、別のステートメントを使用して、ハミング距離が3以下のすべての文字列値を出力しています。ハミング距離を計算するためのインデックスアクセス
文字列値がバインドされているため私が知る限り、その関数は静的パラメータを持つ必要があるので、私は希望の結果に仮想列を使用することができません。また、私の出力は派生列なので、関数ベースのインデックスは使用できません。
フルテーブルスキャンを実行せずにクエリを最適化する代替ソリューションはありますか?現在のところ、スキャンには5〜7秒かかるので、これを300ミリ秒に減らしたいと思います。ありがとうございました。ここで
は、ソースコードの一部です:明確化のため
CREATE OR REPLACE FUNCTION HAMMING_DIS(string1 IN varchar2, string2 IN varchar2)
RETURN number IS
distance number := 0;
BEGIN
FOR counter IN 1..length(string1) LOOP
IF substr(string1, counter, 1) = substr(string2, counter, 1) THEN
distance:= distance + 1;
END IF;
END LOOP;
RETURN distance;
END;
SELECT * FROM
(SELECT FULL_NM AS FULL_NAME, HAMMING_DIS(FIRST_NM,'&A') AS HAMMING_DISTANCE
FROM STRINGS_OF_NAMES
)
WHERE HAMMING_DISTANCE > 3;
あなたは正確に何を比較していますか?変数を持つ列?その列の1つおきのインスタンスがある列?また、値についていくつかの情報を教えてください。彼らはいつも同じ長さですか?そうでない場合は、関数やクエリが異なる長さの値をスローする必要があると仮定します。 「3以下」は静的であるか、または異なる値を比較したいですか? –
PL/SQL関数を使用してハミング距離を計算していますか?はいの場合は、この機能のソースコードを表示してください。主にSQL-PL/SQLのコンテキスト切り替えによって影響を受ける可能性があります。 – krokodilko