Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2005 它是。。好/坏/好。。。在存储过程中使用IF/While条件?_Sql Server 2005_Performance_Stored Procedures - Fatal编程技术网

Sql server 2005 它是。。好/坏/好。。。在存储过程中使用IF/While条件?

Sql server 2005 它是。。好/坏/好。。。在存储过程中使用IF/While条件?,sql-server-2005,performance,stored-procedures,Sql Server 2005,Performance,Stored Procedures,我主要关心的是SQL Server 2005。。。我浏览了很多网站,每一个都讲述了不同的东西 哪些场景是好的/可以使用的。。例如,如果或仅当我运行查询时,甚至在内部设置变量值都会有伤害。假设我的SPs正在基于输入参数中的几个条件构建一个动态SQL,我是否需要重新考虑查询。。。如果SP根据表中是否存在某条记录运行不同的查询,该SP会怎么样。等等等我的问题不仅仅限于这些场景。。。我正在寻找一个更一般化的答案,这样我可以改进我的未来 本质上。。。在分支条件/循环中使用哪些语句是好的,哪些是坏的,哪些是

我主要关心的是SQL Server 2005。。。我浏览了很多网站,每一个都讲述了不同的东西

哪些场景是好的/可以使用的。。例如,如果或仅当我运行查询时,甚至在内部设置变量值都会有伤害。假设我的SPs正在基于输入参数中的几个条件构建一个动态SQL,我是否需要重新考虑查询。。。如果SP根据表中是否存在某条记录运行不同的查询,该SP会怎么样。等等等我的问题不仅仅限于这些场景。。。我正在寻找一个更一般化的答案,这样我可以改进我的未来


本质上。。。在分支条件/循环中使用哪些语句是好的,哪些是坏的,哪些是好的

一般来说。。。避免在数据库中使用过程代码,并坚持使用查询。这使查询优化器有机会更好地完成其工作


例外情况是设计用于做很多事情的代码,而不是生成结果集,以及查询需要以指数方式连接行以获得结果的代码

如果不提供任何代码,很难回答这个问题。没有一种语言结构本身是好的/坏的/好的,这就是你想要实现的,以及用这些结构表达出来的效果。

没有明确的答案,因为这实际上取决于具体情况

一般来说,我认为最好在存储过程中保持逻辑尽可能简单和基于集合。例如,使用多个嵌套的IF条件使其过于复杂,可能会使查询优化程序的执行变得复杂,这意味着它无法创建适合存储过程中所有路径的良好执行计划。例如,存储过程第一次运行时,它在逻辑中采用路径A,执行计划反映了这一点。下次使用不同的参数运行时,它将通过路径B,但会恢复原始的执行计划,这对于第二条路径来说不是最优的。解决这个问题的一个方法是,根据所遵循的路径,将负载分解为单独的存储过程进行调用,这样可以优化子存储过程并独立缓存执行计划


循环可能是唯一可行的选择,但一般来说,我会尽量不使用它们——如果可能的话,总是尝试以基于集合的方式进行操作。

+1建议避免数据库中的代码。我不知道y man通过“以指数方式连接行”来解释什么……你能解释一下吗?我想他可能指的是找到一个关系的闭包的问题。例如,如果你试图创建一个运行总数(直到OVER子句得到改进),你需要将每一行连接到之前的所有行。只有6行,这是21个联接,但随着行数的增加,行数按O^2的顺序增加。所以这些查询无法扩展。我很乐意这样做。。。但不幸的是,我的团队成员认为,在SP中有一些过程代码使程序(ASP.NET)更易于维护,因为我们不必重新部署代码,每次都需要更改一些小的内容。我们可以在SP中这样做,ASP.NET会立即实现更改。。。您的建议是什么…不要将存储过程中的代码视为软件开发生命周期的捷径。您应该使用适当的测试系统和部署机制。在适当的情况下,可以在数据库中包含过程代码,但不要使用它来避免SDLC。