oracle相似度查询,特别慢,如何提高速 度?

xs1024 2020-02-07 12:51:20
SELECT a.sbya02_id aa,b.sbya02_id bb
FROM a
left join ASBY_SBYA02 b on b.sbya02_id=3282
WHERE rownum<2
and a.sbya02_id<>3282
and ( SYS.UTL_MATCH.EDIT_DISTANCE_SIMILARITY(a.C04 , b.c04 )>=40
or SYS.UTL_MATCH.EDIT_DISTANCE_SIMILARITY(a.C02 ,b.c02)>=40
or SYS.UTL_MATCH.EDIT_DISTANCE_SIMILARITY(a.C03 ,b.c03)>=40
or SYS.UTL_MATCH.EDIT_DISTANCE_SIMILARITY(a.C05 , b.c05 )>=40
or SYS.UTL_MATCH.EDIT_DISTANCE_SIMILARITY(a.C06 ,b.c06 )>=40
)

C02,c03,c04,c05,c06 字段都是大约2000个字,
现在如果A表是1000行的数据,查询时间是4分钟,

现在如果A表是20000行的数据,查询时间是85分钟,

现在想问一下,如何能提高速 度,通过硬件还是软件的方法?
...全文
865 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
xs1024 2020-04-09
  • 打赏
  • 举报
回复
引用 6 楼 逢桥夜泊 的回复:
两个表之间没有联立,查询表去重的话,两个表至少有一个联立条件,才可以哦,我可能没有理解你想要的那种查询结果


其实这个就是在一个表里取出一条数据,之后将这条数据和所有数据进行比对查看的过程
比如一个表里有1000条记录,那么就是取1条记录,和其他999条记录比对结果,
我现在是用多线程,将999条记录分成多个线程,同时和这个1条记录进行比对
逢桥夜泊 2020-04-08
  • 打赏
  • 举报
回复
两个表之间没有联立,查询表去重的话,两个表至少有一个联立条件,才可以哦,我可能没有理解你想要的那种查询结果
超叔csdn 2020-04-07
  • 打赏
  • 举报
回复
编辑距离相似度的算法复杂度是O(m*n),m是第一个字符串的长度,n是第二个字符串的长度。如果是2个2000长度的,光调用一次都得400万的计算开销。
这个要快只能用程序做,用数据库算不了那么快。
xs1024 2020-02-20
  • 打赏
  • 举报
回复
已对全表执行全部相似度计算,就是慢, 这个慢也不是其他的慢,就是每一条记录执行,大约1-2S,加起来就慢 了
后来没有办法使用了线程的方法,但不知道各位大神还有好办法,或者好的线程方法,我的办法大至是

for i=0 to 线程数 do
{
SELECT *
FROM a
left join ASBY_SBYA02 b on b.sbya02_id=3282
WHERE rownum<2
and a.sbya02_id<>3282
and id=一条记录

}
nayi_224 2020-02-19
  • 打赏
  • 举报
回复
很大概率就是相似度算法算的慢,先确定是不是这个问题。 create table aaaa as SELECT * FROM a left join ASBY_SBYA02 b on b.sbya02_id=3282 WHERE rownum<2 and a.sbya02_id<>3282 直接对全表执行全部相似度计算。如果就是慢,就只能加线程或者改算法了
xs1024 2020-02-12
  • 打赏
  • 举报
回复
A B 表是没有关联条件,但是其中ON b.sbya02_id=3282 这个表里,sbya02_id是主键,所有其在也就是一条记录,

其实现在这个关联不是主要问题 ,问题 是一个字符串在一个表里查找相似度在40的记录的速 度快慢的问题 ,

这几天一直在试,目前想到的是多线程的方法,但是多线程好像必须得多个数据库去操作,不知道有没有大神 有过类似的经验?
「已注销」 2020-02-08
  • 打赏
  • 举报
回复
a b表都没关联条件,你想快到什么程度

3,491

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧