SqlServer 函数Declare通过传变量查询超慢解决办法

SqlServer 函数Declare通过传变量查询超慢解决办法from参考:1,Declare传参查询速度慢,直接放入参数执行sql却快,求大牛给原因2,OPTION(RECOMPILE)提高带参数执行SQL语句的索引效率 遇到的问题:通过参数执行sql函数查询速度超慢示例示例代码:class=”lang:tsqldecode:true”>declare@prefixnvarchar(10)=’095-0021-‘;…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

from

参考:

1,Declare传参查询速度慢,直接放入参数执行sql却快,求大牛给原因

2,OPTION(RECOMPILE)提高带参数执行SQL语句的索引效率

 

遇到的问题:通过参数执行sql函数查询速度超慢

示例示例代码:

class="lang:tsql decode:true">declare @prefix nvarchar(10) = '095-0021-' ;
declare @serialLength int  = 4  ;
declare @remainedLength int = 1;

--1,直接传值,速度很快 
select * from  [dbo].[f_getPartSerialNo]('095-0021-',4,1)
--2,传变量,速度超慢
select * from  [dbo].[f_getPartSerialNo]( @prefix , @serialLength  , @remainedLength  )
--3,使用OPTION(RECOMPILE)解决2速度慢问题。执行速度同1
select  * from dbo.[f_getPartSerialNo]( @prefix , @serialLength  , @remainedLength  ) OPTION(RECOMPILE)

--:f_getPartSerialNo
CREATE FUNCTION [dbo].[f_getPartSerialNo]
(	
	-- Add the parameters for the function here
	@prefix varchar(40),
	@serialLength int, 
	@remainedLength int
)
RETURNS TABLE 
AS
RETURN 
(
	SELECT MIN(LX_IMA01) AS LX_IMA01
	FROM (
		SELECT PART_POOL.LX_IMA01, PART.LX_IMA01 AS IMA001
		FROM (
			SELECT @prefix + NUM AS LX_IMA01
			FROM NUMPOOL
			WHERE SerialLength = @serialLength
		) PART_POOL
		LEFT JOIN (
			SELECT lx_ima01
			FROM innovator.PART
			WHERE PART.LX_IMA01 LIKE @prefix+'%'
				AND IS_CURRENT = '1'
		) Part
		ON PART_POOL.LX_IMA01 = SUBSTRING(PART.LX_IMA01, 1, LEN(PART.LX_IMA01) - @remainedLength)
) X
WHERE IMA001 IS NULL
)
GO

3种查询执行计划:

1,传值:链接

2,传参

在这里插入图片描述

3,使用OPTION(RECOMPILE),执行计划与传值一致。
在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/171401.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • mssql QUOTENAME 的作用[通俗易懂]

    mssql QUOTENAME 的作用[通俗易懂]简单来说吧比如你有一个表,名字叫index你有一个动态查询,参数是表名declare@tbnamevarchar(256)set@tbname=’index’—查这个表里的数据:print(‘select*from’+@tbname)exec(‘select*from’+@tbname)–这样print出来的数据是select*…

    2022年7月25日
    9
  • HTML在线转换JS「建议收藏」

    HTML在线转换JS「建议收藏」HTML在线转换JS工具,它可以在线将html代码转换成js代码,您只需要将需要转换的代码放置于代码框内,然后点击对应的转换按钮。简单、实用、方便、快捷、无干扰。

    2022年9月8日
    0
  • linux wget命令「建议收藏」

    linux wget命令「建议收藏」from:http://wenku.baidu.com/view/0854a222192e45361066f571.htmlWGet使用指南wget是一个从网络上自动下载文件的自由工具。它支持HTTP,HTTPS和FTP协议,可以使用HTTP代理.所谓的自动下载是指,wget可以在用户退出系统的之后在后台执行。这意味这你可以登录系统,启动一个wget下载任务,然后退出系统,wget将在后台执行直到任务完成,相对于其它大部分浏览器在下载大量数据时需要用户一直的参与,这省去了极大的麻烦。wg

    2022年5月7日
    42
  • 宏基因组数据分析:差异分析(LEfSe安装使用及LDA score计算)

    宏基因组数据分析:差异分析(LEfSe安装使用及LDA score计算)文章目录简介安装简介安装报错:Collectingpackagemetadata(current_repodata.json):doneSolvingenvironment:failedwithinitialfrozensolve.Retryingwithflexiblesolve.Solvingenvironment:failedwithrepodatafromcurrent_repodata.json,willretrywithnextre

    2022年6月5日
    98
  • 理解面向对象的语言特点_面向对象的理解并举例

    理解面向对象的语言特点_面向对象的理解并举例前言:我们学习的javascript语言是一门面向对象的语言,所以这一概念我们需要理解与认识!下面是理解性的理论内容,不需要记忆,理解与思考我们的学习才能站在更高的视角!一、认识:面向对象是当今主

    2022年8月2日
    4
  • 二分法matlab编程代码及注释(MATLAB二分法求方程的近似解)

    matlab二分法求解实例关注:95答案:2mip版解决时间2021-01-2801:44提问者人潮拥挤你不在2021-01-2718:57求函数f=x^3+2*x^2+x-5(-2,2)为区间起点和终点,10^-4为精度>>a=-2;b=2;x=a:b;f=@(x)x^3+2*x^2+x-5;c=(a+b)./2;whileabs(b-a)>1e-6i…

    2022年4月11日
    43

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号