我有一个表格,在数据库列中填充了字符串。我正在计算该列与绑定变量的汉明距离,然后使用单独的语句输出所有字符串值,例如汉明距离小于或等于3。
由于字符串值已经被绑定,所以无法在期望结果上使用虚拟列,因为据我所知,这需要函数具有静态参数。此外,我不能使用基于函数的索引,因为我的输出是派生列。
是否有一种替代方案来优化查询而不执行完整的表扫描?当前扫描需要5-7秒钟,我希望将其缩短到300毫秒。谢谢。
以下是部分源代码:
由于字符串值已经被绑定,所以无法在期望结果上使用虚拟列,因为据我所知,这需要函数具有静态参数。此外,我不能使用基于函数的索引,因为我的输出是派生列。
是否有一种替代方案来优化查询而不执行完整的表扫描?当前扫描需要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;