£微笑 2019-04-18 18:35 采纳率: 0%
浏览 163

SQL SERVER里 ,不同的执行函数方式,为何花时间差异那么大?

有一个function代码如下,就是把参数的内容返回来而已:

CREATE FUNCTION [dbo].fnGetsomedata (
@pXML XML

)
RETURNS @sList TABLE
(
RowID BIGINT
)
AS
BEGIN
IF @pXML IS NOT NULL
BEGIN
INSERT INTO @sList(
RowID
)
SELECT
T.tmp.value('(.)','BIGINT') AS ROWID

FROM @pXML.nodes('/XML/*') T(tmp);

END;
RETURN;
END

然后分别两种方式调用:

DECLARE @data XML =(SELECT TOP 5000 RowID FROM table1 FOR XML PATH('XML'))
SELECT * FROM [dbo].fnGetsomedata(@data)

还有一种:

SELECT * FROM [dbo].fnGetsomedata((SELECT TOP 5000 RowID FROM table1 FOR XML PATH('XML')))

然后发现第二种需要差不多一分钟才出结果,而第一种不到一秒就可以,区别只是定义了一个变量,为何查询速度差异这么大?

  • 写回答

1条回答 默认 最新

  • 憧憬blog 2023-03-15 07:54
    关注

    在第一种方式中,查询语句已经把 5000 条数据赋值给了变量 @data,在调用函数时直接使用了变量。而在第二种方式中,每次调用函数时都会重新生成 XML,并且需要将 XML 作为参数传递给函数,这就会导致查询时间较长。

    因此,建议在调用函数时使用第一种方式,先将数据赋值给变量,再将变量传递给函数。这样可以大大提高查询效率。

    评论

报告相同问题?

悬赏问题

  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 CSAPPattacklab
  • ¥15 一直显示正在等待HID—ISP
  • ¥15 Python turtle 画图
  • ¥15 关于大棚监测的pcb板设计
  • ¥15 stm32开发clion时遇到的编译问题
  • ¥15 lna设计 源简并电感型共源放大器
  • ¥15 如何用Labview在myRIO上做LCD显示?(语言-开发语言)
  • ¥15 Vue3地图和异步函数使用