首页 > 解决方案 > 为什么将用户函数中的数据插入表变量时使用临时表更快?

问题描述

我有一个内联表值函数。我想将该函数的输出插入到表变量中,以便可以将其传递给另一个函数。

DECLARE @PeopleToEmail mb.PeopleToEmailOrPhone;

INSERT INTO
    @PeopleToEmail
SELECT
    *
FROM
    mb.GetOptedInEmails('All')
;

在我的数据集上,这个查询需要 28 秒才能运行。

但是,如果我使用中间临时表,运行时间会下降到大约 9 秒。

SELECT
    *
INTO
    #OptIns
FROM
    mb.GetOptedInEmails('All')
;

DECLARE @PeopleToEmail mb.PeopleToEmailOrPhone;

INSERT INTO
    @PeopleToEmail
SELECT
    *
FROM
    #OptIns

这对我来说毫无意义,意味着我的代码是需要的两倍。谁能帮我

  1. 了解为什么会这样。
  2. 考虑另一种在没有中间表的情况下优化查询的方法。

我被困在 SQL Server 2012 上。该功能很长,但您可以在此处查看

没有临时表

没有临时表

温度表

温度表

标签: sqlsql-serversql-server-2012

解决方案


推荐阅读