我已经运行了一些代码,其中有人想要创建一个动态表,运行一个select语句来填充该表,然后使用该表的数据运行一系列存储过程。所有这些都是使用来自.NET代码的内联SQL来完成的。
他们所做的基本上是(伪代码):
declare table;
insert IDs into table
exec storedprocedure table
exec storedprocedure table
exec storedprocedure table
exec storedprocedure table在我看来,而且我没有什么可坚持的,那就是,这可能不如创建一个存储过程那样高效,而.NET代码只是调用这个封装存储过程。
这两种方法是否都有性能上的影响或收益?
发布于 2022-01-13 22:20:13
,这两种方法是否都有性能上的影响或收益?
正常情况下。
唯一真正的区别(这不太重要)是发送到Server的请求数据的大小,以及散列TSQL批处理以确定是否存在缓存计划的成本。
一旦为TSQL批处理找到缓存的计划,执行将与RPC请求调用存储过程相同。
如果这个批处理以非常高的频率运行,另一个潜在的问题是临时表元数据不会被缓存。因此,如果您正在运行这1000次/秒的时间,并且有一个TempDb文件,则可以在tempdb中获得元数据页锁存争用。
这种事情在很久以前就很重要了,但现在只有在边缘情况下才能注意到。
https://stackoverflow.com/questions/70703525
复制相似问题