SQL Server存储过程全局变量

时间:2018-02-09 19:52:12

标签: sql-server tsql stored-procedures

我在SQL Server中编写存储过程时遇到了一些问题。当我将全局或局部变量传递给select查询时,执行需要3分钟;但是,当直接传递值而不是通过变量时,它只需要1秒。

例如:

NUL

请指导/建议我如何处理这个逻辑,但我必须使用第一个逻辑

2 个答案:

答案 0 :(得分:0)

据我在第一个查询中看到,您使用的是varchar(10),但是在第二个查询中使用了一个整数(在where子句中没有引号)。 Int变量的过滤/比较比varchar(string)更快,因为int变量占用的空间比varchar变量(字符串)少得多。这就是索引提供快速搜索的原因。

修改 - > 由于post-owner声明两个过滤器都是使用varchar:完成的 使用硬编码值,同时在"中进行过滤" sql server的子句,因为运行的最佳查询已经通过统计信息得知。这里有一个很好的例子: Why SQL Server go slow when using variables?

这个例子基本上说,如果我想让你给我1KG的橘子,你会拿一个篮子把它带给我,因为你知道一个篮子已经足够了。但是,如果我告诉你"带给我@value的橘子"那么你需要找出@value是什么以及什么样的工具 - 篮子?袋?也许是卡车? - 这个过程就足够了,这需要时间。

顺便说一下,如果您是在存储过程中进行的,可以尝试添加" WITH RECOMPILE"创建时你的SP?在某些论坛中,它表示这可能有助于提高您所处的情况的性能。

答案 1 :(得分:0)

当值被硬编码到查询中时,查询分析器将查找保存的统计信息以生成最佳查询计划,因此运行速度更快。

代码索引可能有助于加快速度。