我有两个表Table1
和Table2
,我需要找到满足Table1.LastName
和Table2.LastName
之间条件 Fuzzy_Qgram (近似匹配优化)的所有行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
中的每一行相乘,并且将返回满足Table1
的行。
执行查询的速度非常慢,因为我Table2
中的 300,000行 <{1}} 3000行
对于此类查询是否有Cross Join
的替代方法可以更好,更快地进行优化?
答案 0 :(得分: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。
答案 1 :(得分: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
当然,您必须使用fuzzy_qgram逻辑替换t1.someColumnOf_t1 + t2.someColumnOf_t2
。
使用它,你有可能看到显着的加速。