[SQL SERVER]無法使用平行執行計畫

[SQL SERVER]無法使用平行執行計畫

最近調校SQL發現,如SQL(如where 條件和擴充欄位)包含使用者函數將無法使用平行計畫,

我個人覺得算是一個BUG,下面使用SQL2014簡單還原該情況

select count(*) from dbo.SalesOrderDetail t1 join TransactionHistory t2
on t1.ProductID=t2.ProductID
where t1.CarrierTrackingNumber like '%-98'

clip_image001

使用平行計畫

加上使用者函數

ALTER function [dbo].[uf_myint](@input int)
returns int
--with schemabinding
as
begin
declare @retval int=0
set @retval=@input*2
return @retval
end

select count(*)
,dbo.uf_myint(1) as [testint]
from dbo.SalesOrderDetail t1 join TransactionHistory t2
on t1.ProductID=t2.ProductID
where t1.CarrierTrackingNumber like '%-98'

clip_image002

無法使用平行計畫

目前我的解決方法是移除函數,並把函數邏輯直接寫在SQL

clip_image003

clip_image004

SQL Server查詢優化程式使用平行計畫