Oracle 如何加快编辑距离和插入查询?

Oracle 如何加快编辑距离和插入查询?,oracle,performance,edit-distance,Oracle,Performance,Edit Distance,我需要比较主表文本字段和其他文本字段 索引不存在。 主表90000行 --------------- MASTER TABLE --------------- DATA_KEY NUMBER TEXT VARCHAR2(2000) ORDER_NO NUMBER --------------- DETAIL TABLE --------------- DATA_KEY NUMBER SIMILAR_DATA_KEY NUMBER DISTANCE_COUNT NUMBER ---------

我需要比较主表文本字段和其他文本字段

索引不存在。 主表90000行

---------------
MASTER TABLE
---------------
DATA_KEY NUMBER
TEXT VARCHAR2(2000)
ORDER_NO NUMBER

---------------
DETAIL TABLE
---------------
DATA_KEY NUMBER
SIMILAR_DATA_KEY NUMBER
DISTANCE_COUNT NUMBER

---------------
INSERT QUERY
---------------
INSERT INTO DETAIL
(
  SELECT DATA_KEY, SIMILAR_DATA_KEY, DISTANCE_COUNT
  FROM
  (
  SELECT A.DATA_KEY AS DATA_KEY, B.DATA_KEY AS SIMILAR_DATA_KEY, 
    UTL_MATCH.EDIT_DISTANCE(A.TEXT, B.TEXT) AS DISTANCE_COUNT
  FROM 
    (SELECT DATA_KEY, TEXT, ORDER_NO FROM MASTER) A
    INNER JOIN
    (SELECT DATA_KEY, TEXT, ORDER_NO FROM MASTER) B
    ON (A.ORDER_NO < B.ORDER_NO)
  )
  WHERE DISTANCE_COUNT <= 5
)

慢速区是计算距离的地方。你想通过这个连接完成什么!我现在明白了。我将尝试更改连接。如果仍然没有答案,我将在稍后发布一个答案。我看了一下,但不幸的是,几百行的测试数据不足以在这里进行测试。下面是我将如何进行故障排除,我的目标是计算出一小时内可以运行多少次UTL_MATCH.EDIT_DISTANCE的呼叫。我会用PL/SQL编写它。我会将内存中的所有内容加载一次,然后循环遍历数据,而不是再次访问数据库,然后获得运行速率。
ORDER_NO field is for avoid duplicated compare. (1 .. 90000)
=============================================================
A.ORDER_NO < B.ORDER_NO
------------------------------------------
1, 1 <- exclude
1, 2 <- join
1, 3 <- join
1, 4 <- join
..
2, 1 <- exclude
2, 2 <- exclude
2, 3 <- join
2, 4 <- join
...
3, 1 <- exclude
3, 2 <- exclude
3, 3 <- exclude
3, 4 <- join

1. NOT need compare 1 and 1
2. Need compare 1 and 2
3. NOT need compare 2 and 1 (because, duplicate 2.)

so, for decrease compare count...
=============================================================