我有几个长时间运行的报告型事务,需要5-10分钟。通过使用存储过程,我是否会看到任何性能提升?这会有意义吗?
每个查询每晚运行一次。
发布于 2008-09-24 20:20:57
简短的答案是:不,存储过程不会提高性能。首先,如果您使用参数化查询,那么存储过程和内联SQL在性能上没有区别。原因是所有查询都缓存了执行计划,而不仅仅是存储过程。看一看http://weblogs.asp.net/fbouma/archive/2003/11/18/38178.aspx
如果你没有参数化你的内联查询,你只是构建查询并将‘参数’作为字面量插入,那么每个查询在数据库中看起来都是不同的,需要对每个查询进行预编译。因此,在这种情况下,在内联SQL中使用参数是在帮自己的忙。无论如何,从安全的角度来看,您都应该这样做,否则您就会受到SQL注入攻击。
但不管怎样,预编译问题在这里是一个转移注意力的问题。您正在谈论的是长时间运行的查询--如此之长,以至于预编译将变得无关紧要。所以不幸的是,你不会在这里轻易脱身。你的解决方案将是优化你的查询的实际设计,甚至重新思考你处理任务的整个方式。
发布于 2008-09-24 20:04:55
可能不会。存储过程为您提供了预编译SQL的优势。如果你的SQL不经常被调用,那么这个优势将变得毫无价值。因此,如果您的SQL因为查询本身很昂贵而很昂贵,那么存储过程将不会给您带来任何有意义的性能优势。如果您有频繁调用的查询,并且这些查询本身执行得很快,那么使用proc是值得的。
发布于 2008-09-24 20:12:02
很可能不是。从存储过程中获得的性能增益(取决于您的用例)在微观上是不可察觉的,只有在宏中是不明显的。
报告类型的查询是聚合大量数据的查询,如果是这样的话,无论执行方法如何,它都会很慢。只有索引和/或其他物理数据更改才能使其更快。
请参见:
Are Stored Procedures more efficient, in general, than inline statements on modern RDBMS's?
https://stackoverflow.com/questions/129494
复制相似问题