Sql server Insert to table变量非常慢

Sql server Insert to table变量非常慢,sql-server,performance,user-defined-functions,table-variable,Sql Server,Performance,User Defined Functions,Table Variable,我编写了一个多语句表值函数。但是我在这个函数中遇到了缓慢的问题 CREATE FUNCTION [dbo].[userFunc] ( -- Input param ) RETURNS @Results TABLE ( UserId BIGInt, FirstName BIGINT, LastName INT ) AS BEGIN INSERT INTO @Results SELECT UserId, FirstName, LastName

我编写了一个多语句表值函数。但是我在这个函数中遇到了缓慢的问题

CREATE FUNCTION [dbo].[userFunc]
(   
-- Input param
)
RETURNS 
@Results TABLE 
(
    UserId BIGInt,
    FirstName  BIGINT,  
    LastName INT
)
AS
BEGIN
    INSERT INTO @Results
    SELECT UserId, FirstName, LastName
    FROM MyTable
RETURN 
END
当我调查这个问题时,我找到了缓慢的原因。问题在于下面的插入查询

    INSERT INTO @Results
    SELECT UserId, FirstName, LastName
    FROM MyTable

但是当我将INSERT删除到@Results中时,查询会很快返回结果。知道原因吗?

用户定义的函数速度很慢。您想做什么?“插入到表变量非常慢”>>是的。要么重新设计函数,使其成为内联表值函数,要么开始使用临时表。由于这个问题以前已经被问过并回答过,请阅读以下内容:而且,我有一个非常大的存储过程。因此,我将其分解为多个部分,并将一些查询移动到用户定义的函数。例如,要获取用户数据,我使用单独的用户定义函数;要获取部门数据,我使用单独的用户定义函数等等。我知道如何在多语句表值函数中使用临时表吗?在调用函数之前创建临时表,并将函数插入临时表中,而不是返回表变量。但我个人会将其作为存储过程,因为您不会返回任何内容。然后,当函数或存储过程完成执行时,临时表被填充,您可以像处理表变量或普通表一样处理临时表。