我有一个关于SQL性能的问题。我将用伪代码来说明我的问题。
我想知道哪种预成型更好,效果如何?例如,每个页面加载10个项目。在.NET中。是不是快了很多?快一点吗?在SQL上有什么不明显的区别?
foreach(item in mylist) {
CallSQLStoredProc(item.id);
}vs
int[] ids; // array of ids
CallSQLStoredProc(ids) // stored procedure returns more than one row for each id发布于 2009-02-04 20:06:04
第二种选择肯定会更快,因为它是单个网络往返,以及单个SP呼叫。
发布于 2009-02-04 20:08:31
确切地说是第二个,从大约10倍到更快。
如果您对id所做的任何操作都可以在set操作中完成,那么与单独调用SP相比,您将获得数倍的性能提升。
我经常有类似这样的proc:
create procedure proc ( @ids varchar(max) ) as select * from users_tbl u内部联接spiltCSV(@ids)c on c.id = u.id --等等
这是一个基于集合的操作;与在proc中使用游标或使用for循环迭代调用具有单个id的过程的过程方法不同。
发布于 2009-02-04 20:11:04
因为这不适用于ocdecio的答案...
只是扩展一下..。在我所见过的大多数系统中,网络流量是性能的限制因素(假设数据库和前端代码经过合理的调优,这并不是绝对可怕的)。即使您的web服务器和数据库服务器在同一台计算机上,如果您频繁地在两者之间来回调用,进程间通信也可能是一个限制因素。
https://stackoverflow.com/questions/513026
复制相似问题