0

我有两个表Table1Table2我需要在其中找到满足条件Fuzzy_Qgram(近似匹配优化)和之间Table1.LastName的所有行Table2.LastName

这是我的查询:

Select * from Table1 
Cross Join
Table2
Where Fuzzy_Qgram(Table1.LastName,Table2.LastName)> =1.5

在这个查询中,每一行Table1与每一行相乘,Table2并返回满足的行Fuzzy_Qgram(Table1.LastName,Table2.LastName)> =1.5

查询的执行非常慢,因为我有超过300,000Table13000Table2

Cross Join对于此类查询,是否有任何替代方法可以更好更快地进行优化?

4

2 回答 2

0

长话短说。

SELECT * 
FROM 
 Table1 t1
 JOIN Table2 t2
  ON 1=1
 CROSS APPLY (
  SELECT 
    fuzzy_qgram = t1.someColumnOf_t1 + t2.someColumnOf_t2
 ) ext 
WHERE ext.fuzzy_qgram >= 1.5

当然,你必须t1.someColumnOf_t1 + t2.someColumnOf_t2用你的fuzzy_qgram 逻辑替换。使用它,您有可能会看到显着的加速。

于 2013-06-12T09:15:46.080 回答
0

函数的参数顺序是否有所不同?我的意思是,当您运行以下查询时,您能保证得到相同的结果吗?

Select Fuzzy_Qgram('Washington','Obama')
Select Fuzzy_Qgram('Obama','Washington')

如果是这样,那么不应该有任何理由对这两种方式进行测试,因此您可以将查询更改为:

Select * 
from   Table1 
       Inner join Table2
         On Table.LastName <= Table2.LastName
Where Fuzzy_Qgram(Table1.LastName,Table2.LastName)> =1.5

当然,我不知道 Fuzzy_Qgram 做了什么,所以你需要彻底测试一下。如果这是正确的,它可能会将您的执行时间减少大约 1/2。

于 2013-06-11T22:47:57.980 回答