【发布时间】:2018-07-08 04:13:12
【问题描述】:
我正在加入一个表以检索一个值,但为了加入我需要做一些逻辑,因为这两个表都没有一个共同的值。所以逻辑是做一个前 1 并从一个公共表中为两个输入获取一个特定的值。我打算将逻辑放在标量函数中,然后在连接条件中调用它。
我有一个像这样的简单连接
LEFT JOIN <IndexTable> Tbl1 ON Tbl1.PrimaryKey = MainTbl.PrimaryKey
我打算使用用户定义的标量函数将其更改为类似的东西
LEFT JOIN <IndexTable> Tbl1
ON dbo.fnGetCommonID(Tbl1.PrimaryKey) = dbo.fnGetCommonID(MainTbl.PrimaryKey)
就性能而言,以这种方式使用它好还是有更好的方法。
【问题讨论】:
-
优化器将无法在带有标量函数的版本中使用连接的
ON条件中的任何索引。第一个版本更可取,假设可以用这种方式表达您的查询。 -
我可以推荐你发布标量函数吗?可能有人可以帮助有效地实现相同的结果......
-
在两个表上创建持久计算列并在计算列上连接
标签: sql-server performance join user-defined-functions