标量函数与子查询性能(对于EXISTS)

时间:2016-01-20 23:14:58

标签: sql sql-server

在SO中比较Scalar函数和子查询时几乎没有类似的问题,但我的问题是针对以下用例的。我有一个EXISTS条款,我想转到标量函数。是否会产生额外的性能成本?据我所知(这可能是错误的)EXISTS这里无论如何都会涉及标量函数也会执行的另一个查询。

这是我拥有的

select * 
from
    A
where
    not exists(select 1 from B where B.some_id = A.some_id and B.something = 'x')

我想将其更改为

create function does_exist_in_B (@some_id int) returns bit as
begin
   declare @does_exist bit = 1
   if not exists(select 1 from B where B.some_id = @some_id and B.something = 'x')
       set @does_exist = 0
   return @does_exist
end

select * 
from
    A
where
    does_exist_in_B(A.some_id) = 0

我喜欢使用函数的原因是这个检查需要在其他几个地方重复,我想将这个逻辑保存在一个地方(出于显而易见的原因)。那我该怎么办呢?表值函数会不会有任何区别?

0 个答案:

没有答案