【发布时间】:2013-06-07 22:03:58
【问题描述】:
我有两个表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 中有超过300,000 行,在Table2 中有3000 行
对于此类查询,是否有任何替代 Cross Join 的替代方法以实现更好、更快的优化?
【问题讨论】:
-
您的 fn 是标量,我预计会有问题。您能否将“模糊”逻辑移至例如交叉申请?
-
不,
Table2是 视图 而不是表格。抱歉,打错字了。 -
@Ozren Tkalčec Krznarić:是的,它返回一个标量值,我在该值上应用条件
-
@Raphaël Althaus : 没有任何改进,执行需要同样的时间甚至更长的时间
-
简单地说,如果你的模糊函数不是太复杂,就有机会将该逻辑提取到查询中并加快它的速度。说,'select * from t1 cross join t2 cross apply (selectfuzzy_qgram = ... Logic ...) ext where ext.fuzzy_qgram >= 1.5'
标签: sql-server sql-server-2008 tsql join cross-join