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分鐘,
現在想問一下,如何能提高速 度,通過硬體還是軟體的方法?
uj5u.com熱心網友回復:
a b表都沒關聯條件,你想快到什么程度uj5u.com熱心網友回復:
A B 表是沒有關聯條件,但是其中ON b.sbya02_id=3282 這個表里,sbya02_id是主鍵,所有其在也就是一條記錄,其實作在這個關聯不是主要問題 ,問題 是一個字串在一個表里查找相似度在40的記錄的速 度快慢的問題 ,
這幾天一直在試,目前想到的是多執行緒的方法,但是多執行緒好像必須得多個資料庫去操作,不知道有沒有大神 有過類似的經驗?
uj5u.com熱心網友回復:
很大概率就是相似度演算法算的慢,先確定是不是這個問題。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
直接對全表執行全部相似度計算。如果就是慢,就只能加執行緒或者改演算法了
uj5u.com熱心網友回復:
已對全表執行全部相似度計算,就是慢, 這個慢也不是其他的慢,就是每一條記錄執行,大約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=一條記錄
}
uj5u.com熱心網友回復:
編輯距離相似度的演算法復雜度是O(m*n),m是第一個字串的長度,n是第二個字串的長度。如果是2個2000長度的,光呼叫一次都得400萬的計算開銷。這個要快只能用程式做,用資料庫算不了那么快。
uj5u.com熱心網友回復:
兩個表之間沒有聯立,查詢表去重的話,兩個表至少有一個聯立條件,才可以哦,我可能沒有理解你想要的那種查詢結果uj5u.com熱心網友回復:
其實這個就是在一個表里取出一條資料,之后將這條資料和所有資料進行比對查看的程序
比如一個表里有1000條記錄,那么就是取1條記錄,和其他999條記錄比對結果,
我現在是用多執行緒,將999條記錄分成多個執行緒,同時和這個1條記錄進行比對
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/14703.html
標籤:高級技術
上一篇:oracle清理空間
