【发布时间】:2019-10-25 10:44:29
【问题描述】:
我正在内部加入一个带有表值函数的大表,该函数返回一个要加入的值。 不幸的是,我的所有索引都被绕过,导致对大表进行表扫描。 我这里只是用了1020作为参数,但实际上这是一个变量。
select t1.*
from [DS_DataAccess_XA_EMIR_TSR] t1 (nolock)
INNER JOIN SFTR_fn_UserAccess_GetLEIAccess(1020) t2
ON t1.[Trade Party 1 - Execution Agent ID] = t2.LEI
OR t1.[Trade Party 2 - Execution Agent ID] = t2.LEI
我在两个贸易方字段设置上都有单独的索引。该功能本身会立即运行。我也尝试过使用交叉应用,但结果相同。请参阅下面的执行计划,显示大表的表扫描查询成本:
提前致谢! 扫罗
【问题讨论】:
-
or倾向于杀死优化器。样本数据、期望的结果和对逻辑的解释都会有所帮助。 -
为什么是
OR而不是IN? -
当这两个字段中的任何一个与表值函数返回的值匹配时,这只是显示数据的一种情况。
标签: sql sql-server indexing inner-join